Brauche Dringend Hilfe: Löschen eines In der Laufzeit generierten Controls per Klick.

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Brauche Dringend Hilfe: Löschen eines In der Laufzeit generierten Controls per Klick.

    Hallo Liebe Community :)

    Ich habe Folgendes Problem:

    Ich Schreibe an einem Mini-Game in
    Visual Basic 2010 Express auf Win7.

    In diesem Minigame gibt es u.a. Mauern die Man zerstören kann.
    Ich hatte mir das so gedacht,
    das man mit einem Klick auf die Mauer, die Mauer zerstören kann.

    Mein Code bis jetzt sieht ungefähr so aus:

    Dim Mauer as new Panel

    Mauer.position = 'die Position

    Mauer.Size = 'die Größe

    Und dann noch das Klick ereignis,
    Ich dachte mir... Nehmen wir diesen AddHandler:

    AddHandler Mauer.MouseClick, AdressOf Zerstören

    Sub Zerstören()


    'So und hier hänge ich. Was soll ich jetzt hier reinschreiben, das sich die Mauer löscht?
    Es gibt mehrere von den Generierten Mauern. Alles nach dem Selben Prinzip.
    Könntet ihr mir vllt Helfen?

    End Sub


    mfG h4x0r


    :)
    Hallo,

    VB.NET-Quellcode

    1. Public Sub Entfernen(ByVal sender As Object, ByVal e As EventArgs)
    2. Me.Controls.Remove(CType(sender,Control))
    3. sender.Dispose()
    4. End Sub


    ruft man dann so auf:

    Entfernen(Mauer)

    Hinweis: Habe es nicht getestet.

    MFG

    Alex-Digital :D

    EDIT: Sollte jetzt funktionieren
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Als erstes. Controls (darunter auch Panels) sind nicht für Spiele gedacht! Verwende GDI+ oder andere Libraries (XNA etc.)

    -> Abgesehen davon wo fügst du das Control hinzu?
    z.B. Form.Controls.add(Mauer)

    Denn so könntest du es auch einfach mit .Controls.remove(Mauer) wieder entfernen

    3. VB-Tag benutzen
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Danke für eure Antworten.

    Ich weis auch Panels nicht für Spiele Gedacht sind.

    Es wird ja kein Modern Warfire 4 oder so.

    Es ist nur ein Minigame in 2D und dafür müssten Panels reichen.
    Aber trotzdem danke für den Hinweis mit GDI+

    Das Problem ist, wenn ich .Controls.remove(Mauer) mache geht es net, da Mauer nur in dem Sub deklariert ist. Und da alle Panels Mauern sind, würden ja alle verschwinden :)
    Hallo,

    aber meine Version sollte eigentlich funktionieren.

    Weil du ja AddHandler Mauer.Click, AddressOf Entfernen machen musst.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

    h4x0r schrieb:

    Es ist nur ein Minigame in 2D und dafür müssten Panels reichen.

    NEIN, NEIN und NEIN! Wenns nur 2D wird nimmst du mindestens GDI+! Warum? Weil Controls zum Steuern eines Programmes gemacht wurden!
    Mit freundlichen Grüßen,
    Thunderbolt
    Ist ja gut, ich habs ja verstanden. :D
    Ich denke das ich aber mir GDI+
    auf die Gleichen Probleme stoßen werde.
    Die Rectangles oder wie die heißen,
    Werden ja gezeichnet.
    Im Form.drawing ereignis.

    Aber wie schaffe ich es nun.
    Dieses Rectangle mit einem Klick darauf,
    Zu löschen?!

    Vllt hat ja GDI+ irgwas womit man sowas umsetzen kann.


    Hat Jemand eine Idee?
    @h4x0r: Zerstören und zerstören ist zweierlei.
    Mit Dispose() räumst Du speicher auf.
    Eine Mauer einreißen bedeutet doch lediglich, dass sie nun nicht mehr an diesem Ort ist. Um dies zu realisieren, muss sie doch nicht disposed werden.
    Gib ihr einfach ein paar vernünftige Attribute: Visible, Location, Pattern.
    Da kannst Du sie im selben Spiel wieder verwenden, ohne groß programmieren zu müssen.
    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!