Panel ArgumentOutOfRangeException

  • Allgemein

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

    Panel ArgumentOutOfRangeException

    Hi. Ich hab hier ein komisches Problem.

    Ich arbeite momentan an einem kleinen Projekt.

    Wenn ich fertig bin soll es ein Control sein,
    das beliebig viele Controls automatisch anordnet.

    Ich lasse das Control also von Panel erben, iteriere durch
    die Controls, checke ob die Controls vom richtigen Typ (in dem Fall SurfaceMember)
    sind, ordne das ganze an und zeichne es.

    Hier ein Screenshot, um das ganze zu verdeutlichen:


    Das ganze funktioniert ziemlich gut und läuft wider Erwarten sehr flüssig.
    Aus einem mir nicht bekannten Grund wird aber eine Exception geworfen,
    sobald die letzte Box hinzugefügt wurde.

    In diesem Fall ist ein Control 128x128px groß.
    Die Exception tritt auf, sobald das 21. Control hinzugefügt wird.

    Wenn jedes Control eine größe von 64x64px hat kann ich beliebig viele
    Boxen hinzufügen, es kommt keine Exception, allerdings hab ich dann das
    Problem, dass die Scrollbar nicht erscheint und ich die restlichen Boxen nichtmehr
    sehe, wenn das ganze Panel voll ist.

    Die Scrollbars habe ich aktiviert, die funktionieren auch.
    Hab ich bereits getestet.

    Nun wüsste ich gerne, weshalb 1. die Exception auftritt und
    2. keine Exception auftritt wenn ich kleine Boxen verwende, aber auch dann die Scrollbar nicht erscheint.

    Ich schreibe das Projekt in C#,
    das sollte aber keine Rolle spielen, da es eine allgemeine Frage ist.

    Vielen Dank im Voraus.
    @SplittyDev:: 1. FlowLayoutPanel
    2. hast Du sicher in einer For-Schleife die Grenzen falsch gesetzt oder so.
    Haltepunkt und Einzelschrittbetrieb. Das heißt Debuggen. :D
    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!
    Wie gesagt, nimm dafür ein FlowLayoutPanel. Da du wahrscheinlich 0-basiert anfängst (in einer Schleife o. ä.) ist der Index außerhalb des Bereichs, denn dann sind es 20.

    Schau mal hier rein, das scheint mir insgesamt die sauberere Lösung zu sein, als das so zu machen.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Vielen Dank für die Antworten.
    Mit nem FlowLayoutPanel ist es leider nicht getan.

    Mein Control passt auch auf, dass die SurfaceMember immer die selbe Größe haben
    und wird auch noch weitere Dinge auf sich selbst zeichnen.

    Deshalb ist es wichtig, dass ich die Elemente selber anordne.
    Bei nem FlowLayoutPanel wird womöglich der Text von einem Member verdeckt.

    Weiß jemand weshalb das mit der Scrollbar nicht funktioniert?

    SplittyDev schrieb:

    Scrollbar

    VB.NET-Quellcode

    1. Panel1.AutoScroll = True
    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

    Hatte ich bereits drin.
    Hab das Problem jetzt gelöst, eine indexvariable wurde fehlerhaft berechnet.

    Vielen Dank an alle :)