PictureBox.Click simulieren

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    PictureBox.Click simulieren

    Moin,

    ich würde gerne für eine PictureBox das umsetzen,
    was man mit einem Button mit Button1.Performclick umsetzt.

    Im Unten aufgeführten Code habe ich markiert, wo dies umgesetzt werden soll.

    C-Quellcode

    1. private void pictureBoxeneinfach_Click(object sender, EventArgs e)
    2. {
    3. if (sender == pictureBox1)
    4. {
    5. if (counterkartenaufgedeckt % 3 == 0)
    6. {
    7. // hier eine PictureBox1.Click simulieren
    8. }
    9. pictureBox1.Image = s1.RandomizedList[0]._picture;
    10. counterkartenaufgedeckt += 1;
    11. }


    Danke für Tipps und Tricks

    C#-Quellcode

    1. private void pictureBoxeneinfach_Click(object sender, EventArgs e)
    2. {
    3. if (sender == pictureBox1)
    4. {
    5. if (counterkartenaufgedeckt % 3 == 0)
    6. {
    7. pictureBox1_Click(null, null); // hier eine PictureBox1.Click simulieren
    8. }
    9. pictureBox1.Image = s1.RandomizedList[0]._picture;
    10. counterkartenaufgedeckt += 1;
    11. }
    Du kannst die Control.InvokeOnClick(Control, EventArgs) Methode verwenden.

    C#-Quellcode

    1. private void pictureBoxeneinfach_Click(object sender, EventArgs e)
    2. {
    3. if (sender == pictureBox1)
    4. {
    5. if (counterkartenaufgedeckt % 3 == 0)
    6. {
    7. InvokeOnClick(pictureBox1, null); // hier eine PictureBox1.Click simulieren
    8. }
    9. pictureBox1.Image = s1.RandomizedList[0]._picture;
    10. counterkartenaufgedeckt += 1;
    11. }
    12. }
    PerformClick, InvokeOnClick und Co. sind m.E. immer ein Zeichen für schlechtes Design, wenn man glaubt, sowas zu brauchen. Kannst Du mal bitte in Worten die hier gezeigte Spielsituation beschreiben, die behandelt werden soll?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed ja gerne. Es geht um einen Memorie bzw. hier genauer um das Aufdecken der Karten in einem Memorie.

    Hatte vorher einen Memorie schon fertig bekommen, da wurde das auf - und zudecken mithilfe eines Timers geregelt.
    Das hat sich in der Praxis als ungünstig rausgestellt, denn die Spieler möchten immer gleich das nächste Pärchen aufdecken und nicht warten, bis sie von selber zugedeckt werden.

    Um das also zu umgehen möchte ich das "Spielgeschehen" angenehmer gestalten.

    Karten werden nicht mehr automatisch zugedeckt, sondern wenn ein Kartenpaar aufgedeckt wird, bleibt dieses auch theoretisch ewig sichtbar, bis ein Spieler die nächste Karte öffnet.

    Hier Speziell geht es um das öffnen einer neuen Karte, nachdem ein Kartenpaar geöffnet wurde und nicht als paar identifiziert wurde.

    Bei jedem Pictureboxclick läuft der Zähler "counterkartenaufgedeckt".
    Sind zwei Karten aufgedeckt, befindet sich dieser in einer geraden Zahl.
    Wird nun eine neue Karte aufgedeckt, befindet sich dieser in einer ungeraden Zahl, die durch 3 teilbar ist (darum auch das Modulus3).
    Wenn das Programm diesen Moment erkennt, deckt er alle Karten wieder zu. Dazu muss der Spieler aber erstmal eine Picturebox anclicken und um anschließend eine neue Picturebox zu öffnen, muss er NOCHMAL klicken.

    Lange rede kurzer Sinn, damit der Spieler nicht einen Extraclick tätigen muss, habe ich dann diesen Extraclick vom Programm ausführen lassen, weil einfach dann das Spielgeschehen angenehmer gestaltet wird.
    Aha.
    Du hast doch bestimmt ne Liste von Karten, vielleicht sogar eine Liste von aufgedeckten Karten. Dann wäre es doch sinnvoller, bei der dritten Karte alle außer der dritten Karte zuzudecken. Also gleich die zuzudeckenden Karten einzugrenzen, anstatt alles zuzudecken und dann eine wieder aufzudecken. Das würde man doch im realen Leben auch so machen. Man deckt doch nicht 3 zu und die eine wieder auf. Sondern man dreht nur die beiden ersten zu.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das klingt aber alles sehr nach falscher Architektur und/oder fehlendem Datenmodell.

    Da reicht doch einen Methode welche die Karten auf/zu deckt. Diese wird dann im Click Event der Picturebox aufgerufen(ggf. den sender an die Methode übergeben).

    Auch muss man da nichts mit gerade/ungerade machen. Einfach die aufgedeckten Karten zählen und wenn der Zähler bei 2 ist und man dabei ist die nächste Karte aufzudecken zunächst den Zähler auf 0 stellen und die anderen beiden Karten wieder zu decken.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen