Pictureboxen taggen/gruppieren

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

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

    Pictureboxen taggen/gruppieren

    Gibt es eine Möglichkeit mehrere Pictureboxen zu gruppieren bzw. zu taggen damit ich einfach nur die Gruppe ansprechen muss und nicht jede Picturebox einzeln?

    Also z.B.

    VB.NET-Quellcode

    1. If Picturebox1.Left and Picturebox2.Left and Picturebox3.Left and ... = xy then


    Dass man nicht jede Picturebox einzeln so schreiben muss sondern sagt die alle kriegen den Tag "A" und man dann sowas in der Richtung machen kann:


    VB.NET-Quellcode

    1. If PictureBox.Tag("A").Left = xy then


    wäre extrem hilfreich. Habe aber leider nichts im Internet dazu gefunden

    Pi77Bull schrieb:

    jede Picturebox einzeln
    wird sich nicht vermeiden lassen.
    Was ganz genau soll denn gruppenweise verändert werden?
    Vielleicht genügt Dir dies Beispiel:

    VB.NET-Quellcode

    1. Dim pbs() = {PictureBox1, PictureBox2, PictureBox3}
    2. For Each pb In pbs
    3. pb.BackColor = Color.Aquamarine
    4. Next
    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!
    Es soll nicht wirklich etwas geändert werden sondern überprüft werden ob sich eine Picturebox mit einer anderen schneidet.

    Die Funktion prüft ob sich zwei PB überschneiden:

    VB.NET-Quellcode

    1. Private Function collision(ByVal Object1 As Object, ByVal Object2 As Object) As Boolean
    2. Dim collided As Boolean
    3. If Object1.bounds.intersectswith(Object2.bounds) Then
    4. collided = True
    5. Else
    6. collided = False
    7. End If
    8. Return collided
    9. End Function



    So frage ich dann ab ob sich zwei PB schneiden:

    VB.NET-Quellcode

    1. If collision(Picturebox1, border1) = True Then
    2. End If



    Jetzt will ich statt border1 alle Pictureboxen in in pbs() einsetzen.

    Ich habs so probiert aber das funktioniert nich:

    VB.NET-Quellcode

    1. For Each pb In pbs
    2. If collision(Picturebox1, pb) = True Then
    3. End If
    4. Next

    Es scheint mir, du willst ein Spiel programmieren?
    Dann lass dir bitte sagen, dass so keine Spiele gemacht werden. Controls sind dafür nicht vorgesehen und vorallem nicht dafür geeignet. Bei einem Spiel braucht man einen gescheiten Renderer sowie Gameloop, etc.
    Entweder man schreibt sich eine Engine selbe mit GDI+-Renderer oder sogar DirectX-Renderer(bspw per SharpDX oder SlimDX) oder du arbeitest dich in bereits vorhandene ein. Hier im Forum gibt es ein paar solcher Engines, die beste dürfte wohl Sharpex2D sein, die stellt dir alles wichtige bereit und ist sehr umfangreich.
    Aber bitte vergess das mit den Controls ganz schnell wieder, so werden keine Spiele gemacht, die Leute die sowas machen haben spätestens nach 2 Tagen einen unwartbaren, inperformanten und unschönen Code, sowie eine schlechte Grafik.

    LG

    PS: Bitte stelle sofort auf Option Strict On,

    VB.NET-Quellcode

    1. ​If Object1.bounds.intersectswith(Object2.bounds)
    geht garnicht.
    Es soll kein Spiel werden. Eher eine "Animation" für die Schule (Physik, Einfallswinkel - Ausfallswinkel). Und ich soll halt so eine Art "Parkour" machen um zu testen wie lang die PB braucht um ihn zu bewältigen.

    Ich weiß dass man so keine Spiele programmiert..

    PS: Bitte stelle sofort auf Option Strict On,


    VB.NET-Quellcode




    If Object1.bounds.intersectswith(Object2.bounds)



    geht garnicht.



    Nein werde ich nich. Hab mir mal die "Vorteile" durchgelesen aber in meinen Augen sehe ich darin keinen Sinn

    Pi77Bull schrieb:

    in meinen Augen sehe ich darin keinen Sinn
    Dir zu helfen, wenn Du Option strict On ablehnst. X(
    Sorry.
    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!
    Thema geschlossen, um Spam zu vermeiden.
    #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 :!: