SplitContainer Seiten vertauschen

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    SplitContainer Seiten vertauschen

    Hi,

    ich habe einen Splitcontainer. In die beiden Panels habe ich jeweils eine TextBox mit Dock=Fill eingestellt. Textbox1 ist in Panel1, Textbox2 ist in Panel2.

    Nun möchte ich die Reihenfolge der Textboxes vertauschen.

    Ansatz 1: Kann man Panel1 und Panel2 des Splitcontainers vertauschen ? Ich habe dazu nix gefunden.

    Ansatz 2: Kann man die Zuordnung der Textboxes vertauschen ? Also Textbox1 in Panel2 und Textbox2 in Panel1 einstellen. Auch dazu habe ich nix gefunden.

    Ansatz 3: Anderfalls müsste ich die Verarbeitung der Textboxes halt programmmäßig gestalten. Das ist natürlich machbar. Aber das würde ich gern vermeiden, weil ja nicht die Funktion der Textboxes verändert werden soll, sondern nur die Position auf dem Bildschirm.

    Ich bin mir sicher, dass einer der Experten dafür eine elegante Lösung weiß !

    LG
    Peter

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

    @Peter329 Das sist so nicht vorgesehen.
    Pack in jedes Panel ein weiteres Panel und dausch die dann durch Zuweisung des jeweils anderen Parents.
    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!
    Ok, gut zu wissen, dass man da nix vertauschen kann (etwa wie die Spalten einer DatagridView über den DisplayIndex)

    Wenn der Profet nicht zum Berg kommt, dann muss der Berg halt zum Profeten kommen.


    Ich habe jetzt einfach die Textboxes in eine List(of Textbox) eingestellt. Die beiden Einträge werden über entsprechende Indizes addressiert:

    VB.NET-Quellcode

    1. Dim TextboxList As New List(Of TextBox)
    2. Dim intTextboxForeign As Integer
    3. Dim intTextboxBase As Integer
    4. TextboxList.Add(txtInput1) 'Assign input text boxes to textbox vector
    5. TextboxList.Add(txtInput2)
    6. intTextboxForeign = 0 'Address TextForeign
    7. intTextboxBase = 1 'Address TextBase
    8. ...
    9. AddDictionary(TextboxList(intTextboxForeign).Text.Trim,
    10. TextboxList(intTextboxBase).Text.Trim)
    11. ...


    Durch Vertauschen der Index Belegung werden auch die Eingabe TextboxFelder vertauscht. Und das klappt prima. Aber natürlich hab ich wissen wollen, ob ich hier nicht reines "Schattenboxen" betreibe, weil es eine viel einfachere Lösung gibt.

    Also Danke für deine Hilfe und
    LG
    Peter
    @Peter329 Das mit den beiden Extra-Panels sollte da doch einfacher gehen, das ist wie ein SWAP:

    VB.NET-Quellcode

    1. Dim parent = Panel1.Parent
    2. Panel1.Parent = Panel2.Parent
    3. Panel2.Parent = parent
    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!
    Ich habe das mal ausprobiert. Dazu habe ich die Anweisungen zum Austauschen der Indexes herausgenommen, d. h. die Textboxes werden jetzt nicht mehr ausgetauscht. Und stattdessen habe ich die Panel.Parents getauscht.

    VB.NET-Quellcode

    1. 'intTextboxForeign = (intTextboxForeign + 1) Mod 2 'Toggle Textboxes
    2. 'intTextboxBase = (intTextboxBase + 1) Mod 2
    3. Dim HoldPanelParent = SplitContainer1.Panel1.Parent
    4. SplitContainer1.Panel1.Parent = SplitContainer1.Panel2.Parent
    5. SplitContainer1.Panel2.Parent = HoldPanelParent


    Leider wird dadurch die TextEingabe nicht verändert ! D.h. trotz Panel.Parent Tausch bleibt die erste Textbox im Display die txtBoxForeign.

    Mit dem Index Tausch funktioniert die Sache aber problemlos.

    Schade, die Lösung mit dem Swap der Parents klang sehr hübsch. Aber leider scheint sie nicht zu funktionieren.

    LG
    Peter


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Peter329“ ()

    Falls Du sowas meinst:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Temp = TextBox1.Parent
    3. TextBox1.Parent = TextBox2.Parent
    4. TextBox2.Parent = Temp
    5. End Sub


    btw: "Wenn der Profet nicht zum Berg kommt, dann muss der Berg halt zum Profeten kommen." Seit wann wird Profit mit e geschrieben :P ?
    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.
    Jau, mit dem Textbox.Parent klappt die Sache jetzt !

    Damit ist die Aufgabe mit 3 Zeilen Code erledigt ... und die Lösung gefällt mir obendrein konzeptionell, weil tatsächlich nur die Position der Textboxes ausgetauscht wird und nicht ihre Funktion ! Klasse !

    Herzlichen Dank and die Ratgeber und

    LG
    Peter