Maximale Anzahl an Elementen (erreicht)?

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

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

    Maximale Anzahl an Elementen (erreicht)?

    Hallöchen,

    ich habe schon ewig nicht mehr programmiert und möchte gerade ein Programm für mich schreiben, welche mir eine Menge Daten anzeigt.
    Ich möchte Sie "schön" in einem Panel mit mehreren Labeln aufgelistet haben, daher erzeuge ich die Panel und Label zur Laufzeit.

    Nun erhalten ich bei einer bestimmten Anzahl an Elementen einen, für mich, nicht erklärbaren Fehler. Ich könnte mir denken das ich zu viele Elemente auf meine Form packe, bin aber nicht sicher ob dem so ist.

    Ich habe das mal runtergebrochen auf diesen Beispielcode:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub GoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GoToolStripMenuItem.Click
    3. For x = 0 To 100
    4. Dim newpanel As New Panel
    5. With newpanel
    6. .Left = 0
    7. .Height = 50
    8. .Width = 200
    9. .Top = x * 55
    10. .BackColor = Color.Red
    11. Panel1.Controls.Add(newpanel)
    12. For y = 0 To 100
    13. Dim newlabel As New Label
    14. With newlabel
    15. .Left = 10
    16. .Top = 10
    17. .Height = 10
    18. .Width = 10
    19. newpanel.Controls.Add(newlabel)
    20. End With
    21. Next
    22. End With
    23. Next
    24. End Sub
    25. End Class


    Sobald ich also das hinzufügen im Menü starte, fängt er an die Elemente zu erstellen etc, bricht aber irgendwann ab mit folgender Fehlermeldung:


    An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in System.Windows.Forms.dll

    Additional information: Fehler beim Erstellen des Fensterhandles.


    Diese wird mit der Zeile

    VB.NET-Quellcode

    1. ​newpanel.Controls.Add(newlabel)

    markiert.

    Ich könnte mir vorstellen das ich etwas ziemlich dummes mache, da ich die Elemente, welche ja theoretisch auf jedem Panel dieselben, nur mit anderen Werten, sind, immer komplett neu erstelle, aber ich stehe auf dem Schlauch wie ich das anders machen kann...

    Bitte steinigt mich nicht wenn ich hier in den 10 Zeilen Code schon die dümmsten Fehler gemacht habe, aber ich bin froh aus meinem Hirn noch einigermaßen den Syntax von VB herausgekramt zu haben ^^

    Schon mal vielen Dank für die Hilfe :)

    Quillok schrieb:

    daher erzeuge ich die Panel und Label zur Laufzeit.
    halte ich für suboptimal.
    Nimm ein DataGridView, fülle die Daten in eine DataTable und hänge diese dem DataGridView als DataSource an.
    Feddich.
    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 schrieb:

    Quillok schrieb:

    daher erzeuge ich die Panel und Label zur Laufzeit.
    halte ich für suboptimal.
    Nimm ein DataGridView, fülle die Daten in eine DataTable und hänge diese dem DataGridView als DataSource an.
    Feddich.


    Danke erstmal, habe das ganze nun umgemodelt und in einem DataGridView gebastelt, nun scheine ich dieses Problem erst einmal los zu sein Es hat sich dadurch jedoch leider ein komplett neues ergeben.
    Bevor ich einen neuen Thread starte, weiß hier ja vielleicht jemand Rat:

    Da ich mehr Daten habe als auf die Form passen, werden die Panel untereinander angefügt und die Form1 per AutoScroll mit Scrollleisten versorgt. Scrolle ich nun, "verwischen" die einzelnen DataGridView Zellen und bleiben so auch nach dem scrollen erhalte. Ich habe mal zwei Bilder angefügt die das ganze Ausmaß zeigen. Lasst euch vom Design nicht irritieren, dass sind alles Platzhalter :)

    VorScroll = Vor dem Scrollen
    NachScroll = Nach dem Scrollen mit den verwischten Anzeigen


    Weiß hier jemand Rat?

    Freue mich über jede Antwort :)
    Bilder
    • nachscroll.png

      65,53 kB, 897×662, 169 mal angesehen
    • vorscroll.png

      60,34 kB, 897×662, 194 mal angesehen

    Quillok schrieb:

    mit den verwischten Anzeigen
    Falls die Tipps von @VB1963 nicht helfen:
    Kannst Du ei kleines Testprojekt erstellen und anhängen, das diesen Effekt reproduziert?
    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!

    VB1963 schrieb:

    Da kann man nur vermuten, was helfen könnte......?


    Danke für den Hilfeversuch, DoubleBuffered steht mir allerdings nicht zur Auswahl, als Fehlermeldung kommt etwas von "geschützt"?! Liegt das vielleicht daran, dass ich die DGVs während der Laufzeit erzeuge?

    Refresh hat eine merkwürdige Auswirkung, und zwar scheint das DGV dann neu gezeichnet zu werden, allerdings bleibt das verwischen vorhanden, dafür werden die Einträge schwärzer und fetter, als ob eine Schicht über die andere geschrieben wird... Was mir da gerade während des Schreibens einfällt, kann der Fehler dadurch entstehen, dass ich den Hintergrund der einzelnen Zellen transparent gemacht habe???

    RodFromGermany schrieb:

    Quillok schrieb:

    mit den verwischten Anzeigen
    Falls die Tipps von @VB1963 nicht helfen:
    Kannst Du ei kleines Testprojekt erstellen und anhängen, das diesen Effekt reproduziert?


    Wenn ich heute Abend die Zeit finde, werde ich das mal probieren...

    Quillok schrieb:


    Refresh hat eine merkwürdige Auswirkung, und zwar scheint das DGV dann neu gezeichnet zu werden, allerdings bleibt das verwischen vorhanden, dafür werden die Einträge schwärzer und fetter, als ob eine Schicht über die andere geschrieben wird... Was mir da gerade während des Schreibens einfällt, kann der Fehler dadurch entstehen, dass ich den Hintergrund der einzelnen Zellen transparent gemacht habe???


    Habe den Fehler nun gefunden, es waren wirklich die transparenten Zellen Schuld... habe die betreffenden Zeilen gelöscht und schwupps, geht alles wie es sein soll...
    Ist was falsch an dem Code oder wird die Transparenz von Zellen nicht unterstützt?

    VB.NET-Quellcode

    1. ​DGView.Rows(y).Cells(0).Style.BackColor = Color.Transparent
    2. DGView.Rows(y).Cells(1).Style.BackColor = Color.Transparent
    3. DGView.Rows(y).Cells(2).Style.BackColor = Color.Transparent


    Auf jeden Fall danke für eure Hilfe! :)