Zwei Panels im panel nebeneinander platzieren.

  • VB.NET

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

    Zwei Panels im panel nebeneinander platzieren.

    Hallo Jungs und Mädels,

    hab mal wieder ein kleines Problem. Und zwar erstelle ich zur Laufzeit ein Panel, dass auf der Form platziert wird und Dockstyle.Fill bekommt.(geht)
    Dann erstelle ich eine zweites Panel im ersten Panel mit dockstyle.left(geht)

    jetzt das Problem das dritte Panel soll auch ins erste und rechts neben dem Zweiten sitzen und den Rest des Ersten Panels ausfüllen. Wenn ich es im Editor erstelle geht das ja auch aber wenn ich es zur Laufzeit erstelle, wird dass erste Komplett ausgefüllt.

    Wie kann ich das machen, damit das dritte Neben dem Zweiten platziert wird und dann alles nach rechts ausfüllt?

    Vielen Dank im Voraus

    MFG ICE

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ICEMAN-Wappen“ ()

    Wie schreibe ich mir denn selber einen Dock??

    Edit: Ich habe mir das ganze mal manuell estellt und im designer mal nach geschaut wie VB das ganze löst aber ich seh da nix..

    VB.NET-Quellcode

    1. Private components As System.ComponentModel.IContainer
    2. 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
    3. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
    4. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
    5. <System.Diagnostics.DebuggerStepThrough()> _
    6. Private Sub InitializeComponent()
    7. Me.Panel1 = New System.Windows.Forms.Panel()
    8. Me.Panel2 = New System.Windows.Forms.Panel()
    9. Me.Panel3 = New System.Windows.Forms.Panel()
    10. Me.Panel1.SuspendLayout()
    11. Me.SuspendLayout()
    12. '
    13. 'Panel1
    14. '
    15. Me.Panel1.Controls.Add(Me.Panel3)
    16. Me.Panel1.Controls.Add(Me.Panel2)
    17. Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
    18. Me.Panel1.Location = New System.Drawing.Point(0, 0)
    19. Me.Panel1.Name = "Panel1"
    20. Me.Panel1.Size = New System.Drawing.Size(819, 380)
    21. Me.Panel1.TabIndex = 0
    22. '
    23. 'Panel2
    24. '
    25. Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
    26. Me.Panel2.Dock = System.Windows.Forms.DockStyle.Left
    27. Me.Panel2.Location = New System.Drawing.Point(0, 0)
    28. Me.Panel2.Name = "Panel2"
    29. Me.Panel2.Size = New System.Drawing.Size(200, 380)
    30. Me.Panel2.TabIndex = 0
    31. '
    32. 'Panel3
    33. '
    34. Me.Panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
    35. Me.Panel3.Dock = System.Windows.Forms.DockStyle.Fill
    36. Me.Panel3.Location = New System.Drawing.Point(200, 0)
    37. Me.Panel3.Name = "Panel3"
    38. Me.Panel3.Size = New System.Drawing.Size(619, 380)
    39. Me.Panel3.TabIndex = 1
    40. '
    41. 'Form1
    42. '
    43. Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
    44. Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    45. Me.ClientSize = New System.Drawing.Size(819, 380)
    46. Me.Controls.Add(Me.Panel1)
    47. Me.Name = "Form1"
    48. Me.Text = "Form1"
    49. Me.Panel1.ResumeLayout(False)
    50. Me.ResumeLayout(False)
    51. End Sub
    52. Friend WithEvents Panel1 As System.Windows.Forms.Panel
    53. Friend WithEvents Panel3 As System.Windows.Forms.Panel
    54. Friend WithEvents Panel2 As System.Windows.Forms.Panel

    ICEMAN-Wappen schrieb:

    Wie schreibe ich mir denn selber einen Dock?
    Hä?
    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!

    ICEMAN-Wappen schrieb:

    Der Post über deinem.
    Wass sollen wir diesem Code entnehmen?
    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!
    Dann bitte ich Dich, aus der jetzigen Sicht Dein Problem noch mal neu zu formulieren.
    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.

    wenn ich im Formular-Designer ein Panel platziere und Dock=fill stelle wird es an die Form gedockt.
    Dann lege ich ein 2. Panel in das erste und docke es links.
    Das dritte Panel soll neben das 2. und den rest(Nach recht) des ersten panels ausfüllen.
    Im Designer funktioniert das ja einwandfrei.
    Aber wenn ich die Panels nun zur Laufzeit erstelle, liegt das 3.Panel hinter dem 2.Panel und Füllt das komplette 1. Panel aus.
    Das soll so nicht sein sondern eben so wie im designer. Und das bekomme ich nun nicht hin.
    Und das funktioniert nicht, wenn Du den Code aus der InitializeComponents() abschreibst?
    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!

    ICEMAN-Wappen schrieb:

    Aber wenn ich die Panels nun zur Laufzeit erstelle, liegt das 3.Panel hinter dem 2.Panel und Füllt das komplette 1. Panel aus.

    Es kommt auch auf die Reihenfolge an, in der die Panels dem ParentPanel geaddet werden. Das Panel mit Dock.Fill muß entweder zuerst geadded wern oder zuletzt - habich vergessen.
    Mach Dir ein UserControl, auf dem kannst Du Deine Panels platzieren wie immer Du willst.
    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!
    Erstell dir zuerst dein erstes Panel mit dem Dockstyle.Fill. Dann erstellst du dir das nach links gedockte Panel im ersten Panel mit Dockstyle.Left und schließlich das rechte mit Dockstyle.Fill. Das sollte doch gehen?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub btndocs_Click()
    2. frmMain.Controls.Clear()
    3. Dim newDocspnl As New Panel With {.Dock = DockStyle.Fill, _
    4. .Name = "pnlDocuments"}
    5. Dim DocsUSelpnl As New Panel With {.Name = "pnlUSel", _
    6. .Dock = DockStyle.Left, _
    7. .Width = 200, _
    8. .BorderStyle = BorderStyle.FixedSingle}
    9. Dim btnCreateNewUnit As New Button With {.Name = "btnCreateNewUnit", _
    10. .Text = "Neues Unterichtsfach", _
    11. .Size = New Size(194, 23), _
    12. .Location = New Point(3, 3)}
    13. Dim i As Integer = 0
    14. For Each Dire In Directory.GetDirectories(Speicherpfad)
    15. Dim btnUnitSel As New Button With {.Name = "btnUnitSel" & i + 1, _
    16. .Text = Path.GetFileName(Dire), _
    17. .Size = New Size(194, 23), _
    18. .Location = New Point(3, 38 + i * 29)}
    19. i += 1
    20. AddHandler btnUnitSel.Click, AddressOf Load_Documents
    21. DocsUSelpnl.Controls.Add(btnUnitSel)
    22. Next
    23. DocsUSelpnl.Controls.Add(btnCreateNewUnit)
    24. newDocspnl.Controls.Add(DocsUSelpnl)
    25. frmMain.Controls.Add(newDocspnl)
    26. End Sub


    In diesem Codeabschnit wird Panel1(newDocspnl) erstellt, und panel2(DocsUSelpnl) erstellt und an Panel1 links angedockt. Außerdem werden Buttons im 2. Panel erzeugt, die wenn sie geclickt eine Prozedur ausführen, die dann das dritte Pannel erstellt und dort weitere Steuerelemente einfügt. Und dann wird das dritte Panel an das ganze Panel 1 gedockt(fill) und liegt hinter dem 2. Panel.