Größe von zu Laufzeiten neu erstellten Pictureboxen ändern

  • VB.NET

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

    Größe von zu Laufzeiten neu erstellten Pictureboxen ändern

    Guten Abend :)
    Vorweg: Ich bin relativ neu in VB, benutze Visual Basic 2008 Express - aber ich kann gut und schnell Neues lernen :D

    Ich versuche jetzt schon seit vielen Stunden nach einer Lösung von meinem Problem, auf neu erstellte Pictureboxen zurückgreifen zu können. Um ehrlich zu sein hatte ich bis jetzt nichtmal
    den Begriff "New" in VB verwendet. Mein Code zum Erstellen einer Neuen Picturebox sah dann ungefähr so aus:

    VB.NET-Quellcode

    1. Dim Newpic As New PictureBox
    2. '++ Einzelne Eigenschaften der neuen Picturebox (Newpic.Name = .. || Newpic.Position = .. etc.)
    3. Me.Controls.Add(Newpic)


    Jetzt wollte ich Per Mausklick eine neue Picturebox erstellen und dann, wie man es z.B. von der Windows Benutzeroberfläche kennt*, die Größe der Picturebox beim gedrückthalten der Maustaste dem
    "Zwischenraum" der "Klickposition" und der jetztigen Position der Maus anpassen. Nach loslassen der Maustaste sollte die Picturebox ihre jeweilige Größe und Position behalten - bei erneutem Gedrückthalten der Maustaste sollte dann eine neue Picturebox erscheinen, welchen Größe sich erneut dem neuen "Zwischenraum" anpasst, bis die Maustaste losgelassen wird.

    Damit hatte ich dann gewaltige Probleme weil es mir nichtmal gelang nach dem Erstellen einer neuen Picturebox auf diese Zuzugreifen. Demnach wollte ich einfach dem Problem auf den Grund gehen und hängte hinter meinen oben genannten Code ganz einfach folgendes, nachdem ich eine Listbox wild in meine Form gesetzt habe:

    VB.NET-Quellcode

    1. ListBox1.Items.Add(Newpic)


    Und dann hatte ich etwas, für mich "erstaunliches" festgestellt: Die Adds in der Listbox waren einfach Leer. Heißt das, das es nicht Möglich ist, auf neu erstellte Pictureboxen zuzugreifen?

    Es könnte sein, das ihr euch vielleicht über mein Problem lustig macht, weil dessen Lösung für euch sehr einfach ist ...
    Aber ich hoffe, das mir jemand bezüglich meines Problems helfen kann, am besten sollte die neue Picturebox immer zugreifbar sein. ;(
    Danke im Vorraus

    M.f.G.
    Tomato



    Spoiler anzeigen
    *Wenn man auf dem Desktop von Windows die linke Maustaste gedrückt hält, und die Maus bewegt entsteht bis zum Zeitpunkt des Loslassens der linken Maustaste ein bläuliches Fenster, das den X- und Y-Abstand von der Position des Mausklicks
    zu der jetztigen Position anzeigt. Das selbe will ich auch haben, nur in Pictureboxform und ohne verschwinden nach loslassen der Maustaste, sondern mit "Festsetzen" nach dem loslassen.

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

    SystemUnknow schrieb:


    Danke für die schnelle Antowort und danke dafür, dass ich jetzt ungefähr weiß, wie man mit Eventhandlern umgehen soll/kann :)
    Aber irgendwie denke ich, Addhandler trägt nicht zur Lösung meines Problemes bei - zumindest wird mir diese durch die
    Codebeispiele von Class1-Objekten nicht direkt klar, da ich ja neue Pictureboxen erschaffen und auf diese zugreifen will.
    Ist es eventuell möglich, ein Objekt als Picturebox in einer Klasse zu deklarieren und wenn ja, wie kann ich diese neu benennen um später auf diese zugreifen zu können?

    Mein Gedanke wäre etwas in die Richtung, irgendwie die neuen Pictureboxen mit Variable i zu benennen (i++) funktioniert mit meinem momentanem Wissen aber noch
    nicht richtig; in "ListBox1" sind die Namen auch nach dem bennenen weiterhin Leer... :huh:
    Dein Problem ist wahrscheinlich, dass du die neue Picturebox nur in einem Sub (hier Buttonclick ?) deklarierst. Dann wird die Variable nach Beendigung sofort verworfen. Deshalb solltest du si in deiner Klasse deklarieren. Da du ja mehrere hast, mach es wie schon gesagt in einer List(Of PictureBox). Da kannst du dann ganz einfach drauf zugreifen!

    Für den Rest solltest du dir die Events MouseMove und MouseDown anschauen und dann entsprechen Newpic.width und newpic.height verändern...