UserControls auf TabControl TapPages <> 0 sehen komisch aus

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von roepke.

    UserControls auf TabControl TapPages <> 0 sehen komisch aus

    Ich mache hier nochmal einen neuen Thread für das Thema auf.
    In meiner letzten Frage ging das unter, da es grundlegend erst mal um was anderes ging.
    Daher verschiebe ich's mal nach hier.
    Ich habe ein kleines Beispielprojekt erstellt und angehängt.

    In MyDLL befindet sich ein UserControl (MuxControl).
    In MyProject gibt es das MyUserControl, das 3 Instanzen von MuxControl beinhaltet.
    Über das frm_Main können die frm_Sub_1 und frm_Sub_2 geöffnet weden.
    Beide frm_Sub_x besitzen ein TabControl auf dem auf jeweils einer TabPage ein MyUserControl zu finden ist.
    Die beiden MyUserControl sind mittels Event „miteinander in Kontakt“. D.h. wird bei einem MuxControl ein Eintrag <> Disabled ausgewählt, wird das gleiche MuxControl auf dem anderen MyUserControl gesperrt und dort angezeigt, dass dieser „Kanal“ bereits verwendet wird.
    Das funktioniert auch soweit.
    Was nicht funktioniert ist mal wieder die leidige Initialisierung der Controls auf den TabPages <> Index = 0.
    -Erst frm_Sub_1 öffnen
    -Dort auf TabPage.Index = 0 ist das MyUserControl zu finden. Layout sieht aus, wie es aussehen soll.
    -z.B. beim mittleren MuxControl einen Eintrag <> Disabled wählen
    -frm_Sub_2 öffnen
    -Dort auf TabPage.Index = 1 ist das MyUserControl zu finden. Layout sieht NICHT aus, wie es aussehen soll.

    -mittleres MuxControl ist gesperrt
    -z.B. beim oberen MuxControl einen Eintrag <> Disabled wählen
    -alle vorhandenen MyUserControls werden aktualisert, danach stimmt das Layout auch auf frm_Sub_2.

    Ich habe schon jede Menge versucht das zu beheben. Leider bisher ohne Erfolg.
    Dass das TabControl ein bißchen "speziell" ist habe ich inzwischen auch begriffen. Nur fehlt mir eine gute Idee für ein Workaround.
    Dateien
    @roepke Sieh Dir mal die Werte der Properties Margin und Padding an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Tausch mal
    MyUserControl_tp2.uc_Shown() und MuxControl_Init(), also mach:

    VB.NET-Quellcode

    1. Call MyUserControl_tp2.uc_Shown() 'Das ist nötig, damit beim Anlegen des Forms schon andersweitig benutze MuxControls in diesem Form als bereits benutzt angezeigt werden.
    2. Call MuxControl_Init()
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja, ich seh grad. Das alte, leidige Thema TabControl/TabPage: Was nicht sichtbar ist, ist nicht da.
    Mach mal:

    VB.NET-Quellcode

    1. Private Sub MuxControl_Init()
    2. Dim _lst As New List(Of String)
    3. _lst.Clear()
    4. _lst.Add("Disabled")
    5. _lst.Add("Entry1")
    6. _lst.Add("Entry2")
    7. tc.SelectedIndex = 1
    8. MyUserControl_tp2.plstMuxControlEntrys = _lst
    9. tc.SelectedIndex = 0
    10. End Sub
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    roepke schrieb:

    was sollten Margin und Padding damit zu tun haben?
    Ich hatte dieses Problem ebenfalls.
    Sieh Dir diese Werte an insbesondere bei TabPage.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VaporiZed schrieb:

    Ja, ich seh grad. Das alte, leidige Thema TabControl/TabPage: Was nicht sichtbar ist, ist nicht da.

    Hat leider auch nichts geholfen.
    Das interessante ist: kommentiere ich

    VB.NET-Quellcode

    1. Call mod_General_MuxControlSelectionChanged()

    im MyUSerControl.vb -> uc_Shown aus, dann sieht das UserControl aus, wie es aussehen soll.
    Es scheint also irgendwie mit dem Abgleich zu tun zu haben, der unmitelbar nach dem Anlegen des UserControl überprüft, ob
    ein gleich indiziertes Control bereits auf einem anderen Form verwendet wird und das neue dann ggf. sperrt.

    Ich hatte dieses Problem ebenfalls.

    Ich habe jetzt ein wenig mit Margin und Padding rumgespielt und mir angesehen. Margin der TabPages ist 4;4;4;4 Padding 6;3 und wenn ich's ändere, ändert sich ggf. das Layout aber das Problem bleibt.

    Zitierfehler korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Ich lad mal selber hoch. Ich habe die Hinweise aus Post#2 und #4 eingebaut.
    Achtung, ich hatte nur .NET-Framework 4.8, daher ggf. wieder runtersetzen.
    Projektmappe öffnen, erst das DLL-Projekt kompilieren, damit die DLL erstellt wird, dann MyProject kompilieren.
    Dann starten, dann SubForm1 öffnen, da ne Auswahl treffen, SubForm1 nicht schließen, SubForm2 öffnen und auf dem TabControl die 2. Seite öffnen.
    btw: Das Programm ist in seiner Grundform etwas instabil gebaut. Wenn man da ne falsche SubForm-Reihenfolge anklickt oder was zuviel schließt, schmiert es ab.
    Bilder
    • Result.png

      14,3 kB, 874×408, 21 mal angesehen
    Dateien
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Bei mir sind's Post #3 und #5, hat kurz gedauert bis ich's kapiert habe.
    Alles klar, so scheint es zu funktionieren.
    Mein Fehler. Ich hatte #3 probiert und danach #5, aber nicht zusammen. Die Kombi machts.

    VaporiZed schrieb:

    Das Programm ist in seiner Grundform etwas instabil gebaut.

    Danke für die Info, ist mir aber bekannt. Das eigentlich Projekt ist über Jahre gewachsen und extrem umfangreich. Ich habe für hier lediglich schnell was zusammengeklickt um das Problem zu schildern/zeigen. Das ich damit keinen Stabilitätspreis gewinne ist klar. Im eigentlichen Programm ist's nicht so wackelig.
    Aufgrund des Umfangs wird's jetzt auch spaßig alle TabPages und UserControls (und davon gibt es einen Haufen) in Ruhe durchzugehen und überall einen entsprechenden Fix zu machen.