Position von zur Laufzeit erstellter Panels ändern

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Pat Rick.

    Position von zur Laufzeit erstellter Panels ändern

    Hey Leute! ;)
    Ich habe ein Problem mit meinem Programm und möchte euch darum um Hilfe bitten. Falls dieses Thema schon einmal vorhanden ist verzeiht es mir bitte ich hab schon viel gegoogelt, aber leider nichts gefunden. :(
    Also zu meinem Problem: Ich habe eine Software, bei der ich über einen Button ein Panel erstelle. Bei jedem Mal klicken kommt ein neues Panel wieder dazu. Nun kann ich das Panel auch schon löschen wenn ich draufklicke. Ich würde nun wollen, dass die anderen Panels (können 5;10;200 etc. sein) ihre Position mit dem löschen eines Panels verändern. Nun die Frage wie realisiere ich das? Ich hoffe ihr könnt mir helfen. ?(
    Danke
    lg Pat ^^
    Quellcode

    Visual Basic-Quellcode

    1. Private Property pnlliste As List(Of Panel)
    2. Private Property introliste As List(Of Panel)
    3. Private Property outroliste As List(Of Panel)
    4. Private Property pctboxliste As List(Of PictureBox)
    5. Dim pnl As New Panel
    6. Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click
    7. Dim pnl1 As New Panel()
    8. pnl1.Location = New Point(3, pnlliste.Count * 60 + 10)
    9. pnl1.Size = New Size(900, 50)
    10. pnl1.BackColor = Color.Silver
    11. pnlliste.Add(pnl1)
    12. Panel89.Controls.Add(pnl1)
    13. Dim intropnl As New Panel()
    14. Dim outropnl As New Panel()
    15. Dim pctbox1 As New PictureBox()
    16. pctbox1.Location = New Point(5, 5)
    17. intropnl.Location = New Point(803, 5)
    18. outropnl.Location = New Point(853, 5)
    19. pctbox1.Size = New Size(40, 40)
    20. intropnl.Size = New Size(40, 40)
    21. outropnl.Size = New Size(40, 40)
    22. pctbox1.BackColor = Color.White
    23. intropnl.BackColor = Color.Red
    24. outropnl.BackColor = Color.Yellow
    25. pctboxliste.Add(pctbox1)
    26. introliste.Add(intropnl)
    27. outroliste.Add(outropnl)
    28. pnl1.Controls.Add(pctbox1)
    29. pnl1.Controls.Add(intropnl)
    30. pnl1.Controls.Add(outropnl)
    31. AddHandler pnl1.Click, AddressOf pn1l_click
    32. pnl = pnl1
    33. End Sub
    34. Sub pn1l_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    35. Panel89.Controls.Remove(CType(sender, Panel))
    36. pnlliste.Remove(CType(sender, Panel))
    37. End Sub
    Wow das ging aber schnell. :)
    Also ich adde die neuen Panels (per button) in ein vorhandenes Panel (Panel1), autoscroll ist aktiviert
    Ja 200 ist etwas übertrieben, soll aber auch vorkommen können (meistens werden es um die 20 sein)
    ich möchte eine Playliste für mein Programm schreiben (Media Player), aber die vorgefertigten Varianten (Listbox/Listview) sind mir zu "unspektakulär". Ich hoffe du verstehst was ich meine.
    lg Pat
    Ok dann wird ichs halt mal mit Ownerdrawing versuchen.
    Vielen Dank für die Antworten ^^ Ihr seid einfach spitze :!:
    Edit: Falls doch noch wer eine Idee hat, dann wäre ich dankbar, wenn er/sie seine Idee hier mit mir teilen würde.

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

    Pat Rick schrieb:

    Falls doch noch wer eine Idee hat
    Sofern Du mal etwas präziser beschreibst, was Du vorhast.
    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!
    @ErfinderDesRades
    Vielen Danke für das Beispiel :thumbsup:
    Hat mir sehr weitergeholfen :D

    @RodFromGermany
    Ich habe eine Form erstellt. Auf dieser Form wurde ein Panel (Panel1) platziert sowie ein MediaPlayer
    Nun adde ich Panels(welche pnl1 benannt wurden) über einen Button in das bereits vorhandene Panel (Panel1)
    Per Klick auf ein Panel(pnl1) lässt sich dies wieder entfernen.
    Bis hierher habe ich keine Probleme. Nun möchte ich aber, dass die anderen Panels (pnl1), welche über den Button erstellt werden ihre Position horizontal verändern und somit keine Lücke mehr vorherrscht.
    Diese Prozedur möchte ich später verwenden um die Panels zu verschieben bzw. ein altes zu löschen sobald ein Titel im MediaPlayer abgespielt wurde. Ich hoffe du verstehst was ich meine
    lg Pat

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

    cool, dann wirf auch mal einen Blick in Outlined und ziehbare Schrift
    Da sind Datenverarbeitung und OwnerDrawing in der partialen DatasetKlasse schwer verknüppert.

    Und das ist sehr fein, denn so gesellt sich das OwnerDrawn-Control als gleichwertiger Eingabe-Kanal zu den anneren Controls, wie Datagridview, List-, Combo-, Text-boxen, und was noch so gibt.

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

    Pat Rick schrieb:

    und somit keine Lücke mehr vorherrscht.
    Kannst Du mal ein Bild von posten?
    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!
    @RodFromGermany
    Hier habe ich zuerst einmal ein Bild, bei dem ich 5 Panels (pnl1) hinzugefügt habe
    Beim 2. Bild wurde das mittlere Panel gelöscht
    Das 3. Bild zeigt was passieren soll (Panels sollen Position ändern)
    und das 4. soll zeigen wie die Liste nachher aussehen soll.

    Ich hoffe du verstehst was ich meine!
    lg Pat
    Steck Deine Panels in ein FlowLayoutPanel, stell die FlowDirection-Property auf TopDown und Du hast den Effekt, den Du Dir wünschst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o