Problem mit übereinander liegenen Panels und der Visible-Eigenschaft

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Problem mit übereinander liegenen Panels und der Visible-Eigenschaft

    Hallo zusammen,

    ich habe 3 Panel, die genau gleich groß sind, aber mit verschiedenen Controls bestückt sind, genau übereinander gelegt.
    Panel 2 habe ich über Panel 1 geschoben und Panel 3 dann über Panel 2.

    Nun soll je nach Auswahl des Anwenders immer nur ein bestimmtes Panel angezeigt werden. Das habe ich dann mit der Visible-Eigenschaft versucht zu lösen, indem in einem Event zuerst alle Panel ausgeblendet werden (Visible = False) und anschließend das entsprechende Panel mit Visible = True eingeblendet werden soll.

    Nun ist es aber so, dass das bei Panel2, das genau in der Mitte liegt, nicht funktioniert. Trotz der Anweisung Panel2.Visible = True erscheint dieses nicht. Panel1 wird aber mit Panel1.Visible = True angezeigt und bei Panel3 funktioniert es auch.

    Wenn ich die Anordnung verändere, ist es so, dass z. B. ohne erkennbaren Grund das oberste Panel nicht angezeigt wird, oder das unterste. Es ist also keine feste Regel erkennbar, dass z. B. immer nur das mittlere Panel nicht angezeigt wird, sondern das ist unterschiedlich.

    Gibt es da denn sonst noch etwas zu beachten?

    Mike
    Wenn alle Panels gleichgroß und deckungsgleich übereinander liegen, würde ich nicht die Visible-Eigenschaft verwenden, sondern stattdessen die Methode BringToFront nehmen.

    VB.NET-Quellcode

    1. Panel1.BringToFront() ' -> Panel1 nach vorn bringen
    2. Panel2.BringToFront() ' -> Panel2 nach vorn bringen
    3. Panel3.BringToFront() ' -> Panel3 nach vorn bringen
    Hallo xtts02,

    vielen Dank für den Tipp. Habe das gerade ausprobiert und leider immer noch das Problem, dass es nur "teilweise" funktioniert.

    Mal wird ein Panel zwei mal hintereinander angezeigt. Mal wird ein Panel gar nicht angezeigt. Ich kann nicht rausfinden, woran es liegt.

    Aufgefallen ist mir aber, dass ich nicht jedes Panel über ein anderes schieben kann. Wenn ich z. B. Panel2 über Panel1 schiebe, dann "springt" Panel1 wieder nach vorne. Was es damit auf sich hat und ob das der Grund für das Problem sein kann, weiß ich nicht.

    Mike
    Das funktioniert aber mit BringToFront. Ansonsten hast du iwelche Fehler im Code, vlt. Events, die das falsche Panel wieder vorholen etc..

    Zu im Designer: Auch im Designer haben die Panels eine Z-Order. Deshalb kann man das mittlere Panel nicht über das oberste schieben, sondern nur darunter.
    Auch im Designer gibts die Funktion "BringToFront", nämlich im KontextMenü, bei rechtsklick aufs Panel.

    Natürlich isses voll unübersichtlich, mehrere übereinander liegende Panels zu gestalten. Besser ist ein TabControl, bei dem man zur Laufzeit die Reiter unsichtbar macht.
    Guggemal TabControl als Basis für Assistenten
    Das ist zwar c#, aber man kanns sich übersetzen lassen: codeconverter
    Hallo,

    vielen Dank nochmal für die Hilfe.

    das Problem habe ich weder mit "Visible = True" noch mit "BringToFront" lösen können. Den Code habe ich mehrfach überprüft, dieser enthält keine Fehler. Habe sogar zu Testzwecken ein ganz neues Programm erstellt, mit 6 Panel, die übereinander liegen und 6 Buttons, die in ihrem Klick-Event jeweils das entsprechende Panel sichtbar machen sollten. Selbst das hat nicht funktioniert.

    Hier ist der Code für die Visible=True-Version:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. PanelUnsichtbar()
    4. End Sub
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. PanelUnsichtbar()
    7. Panel1.Visible = True
    8. End Sub
    9. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    10. PanelUnsichtbar()
    11. Panel2.Visible = True
    12. End Sub
    13. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    14. PanelUnsichtbar()
    15. Panel3.Visible = True
    16. End Sub
    17. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    18. PanelUnsichtbar()
    19. Panel4.Visible = True
    20. End Sub
    21. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    22. PanelUnsichtbar()
    23. Panel5.Visible = True
    24. End Sub
    25. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    26. PanelUnsichtbar()
    27. Panel6.Visible = True
    28. End Sub
    29. Private Sub PanelUnsichtbar()
    30. Panel1.Visible = False
    31. Panel2.Visible = False
    32. Panel3.Visible = False
    33. Panel4.Visible = False
    34. Panel5.Visible = False
    35. Panel6.Visible = False
    36. End Sub
    37. End Class




    Ich habe das Problem jetzt so gelöst, dass ich die Panel nebeneinander bzw. untereinander anordne und das jeweilige Panel zur Laufzeit mit der Location-Eigenschaft auf die richtige Position setze und natürlich mit Visible=True sichtbar mache. Da das einwandfrei funktioniert und ich die Panel ansonsten nicht verändert habe (kein anderer Name, kein Eigenschaften verändert) ist die Ursache m. E. nur das "Übereinander" anordnen gewesen.

    Auch wenn ich mit einer anderen Lösung zum Ziel gekommen bin, so habe ich doch ein erhebliches Störgefühl, da die Ursache nicht gefunden wurde. Mit der anderen Lösung hätte es eigentlich auch funktionieren müssen.

    Mike