Objekt auswählen/anklicken [GDI+/DirectXY/...]

  • VB.NET

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

    Objekt auswählen/anklicken [GDI+/DirectXY/...]

    Nabend,

    ich wollte mal fragen, da ich es gerade erst wieder brauche, wie man das selektieren von Objekten richtig macht.
    Es geht vorerst nur um 2D Objekte (Bilder & FOrmen).

    Es geht auch nicht um das Finden mit der Maus sondern ehr wie es dannach weiter geht, also wie man dannach weiter arbeitet.
    Ich habe das bisher immer in etwa so gemacht (wenn ich mich recht erinnere :whistling: :(

    VB.NET-Quellcode

    1. Class House
    2. selected As boolean = false;
    3. End Class

    Mit dem Klick auf das Gezeichnete Objekt (mit der Position und größe ermittelt):

    VB.NET-Quellcode

    1. selected = true

    Und dann damit arbeiten:

    VB.NET-Quellcode

    1. Foreach House In ListeXY
    2. If House.selected then
    3. 'Damit hab ich dann das ausgewählte gefunden und kann xy damit machen


    Nur mir kommt das ganze sowas von falsch vor, ich kann nicht sagen warum, aber irgendwie ist das Müll.
    Wie würdet ihr das machen?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Eistee“ ()

    Letzten Endes besteht doch wohl nur in der Paint-Routine ein Unterschied zwischen Selected und nicht selected.
    Vielleicht ist es sinnvoll, wenn die Objekte sich selbst zeichnen und Du in der For Each-Schleife einfach nur die Paint-Routine jedes vorhandenen Objektes aufrufst, den est macht dan das Objekt selber.
    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:

    Letzten Endes besteht doch wohl nur in der Paint-Routine ein Unterschied zwischen Selected und nicht selected.

    Nicht wirklich, auch aktionen greifen auf die Eigenschaften des selektierten zurück oder hab ich das Falsch verstanden?
    Zum Beispiel in fast jedem Strategie Spiel, würde man mit einem Rechtsklick die zur Zeit gewählte Einheit zu diesem Punkt schicken.
    Dafür muss ich ja wissen wer gerade selektiert ist ?( (Es geht nicht um ein Strategie-Spiel, ist nur ein Beispiel).

    @Artentus: Also eine Referrenz / so ähnlich wie @Myrax: das wohl meint (Objektreferenz oder Indize).
    Wenn immer nur ein Objekt zur gleichen Zeit selektiert sein kann, nimm dafür eine Variable, z.B. "SelectedObject" o.ä. und merk dir dort beim Selektieren jeweils, welches Objekt das ist. Sinnvollerweise sollten diese Objekte (sorry, deren Klassen mein ich) dann ggf. alle eine gemeinsame Basisklasse haben, von deren Typ dann deine Variable ist (wenns gar nicht anders geht, nimmst du halt Object - aber das auch nicht grad das grüne vom Ei).
    Wenn du mehrere Objekte zur selben Zeit selektieren kannst, nimmst du stattdessen eine Liste, in der du dir die Selektion merkst. Natürlich darfst du dann auch nicht vergessen, die Objekte wieder aus der Liste zu entfernen, wenn sie einzeln de-selektiert werden (sofern das gehen soll).
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Eistee schrieb:

    Nicht wirklich
    Nach meiner Vorstellung ist der wesentliche Unterschied in der Paint-Routine, selbstverständlich wird auch woanders auf dieses Property zugegriffen, sonst könntest Du es gar nicht setzen. :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!