Entwickler-Ecke

WinForms - btn_B verschieben (wenn geklickt und btn_A focussiert ist)


Gizzmo - Mi 22.01.14 15:42
Titel: btn_B verschieben (wenn geklickt und btn_A focussiert ist)
Hallo zusammen, hier ist ein neuer Frischling für euch ;).

Ich hoffe der Titel sagt das Grundlegende schon aus. Ich würde gern einen Button (B) an eine bestimmte Position verschieben, aber nur, wenn ein anderer Button (A) fokussiert ist und der zu verschiebene Button angeklickt wird. D.h. ich muss ja erst Button A anklicken, damit er fokussiert wird.

Das Problemchen ist sicher schnell gelöst, aber ich hab grad echt nen Brett vorm Kopf -.-.

Woher rührt das Ganze?? Ich würde gern auf ganz einfache Weise (Labels und Button) ein Schachfeld simulieren. Den Button A bekomm ich auf den Labels ohne Probleme verschoben. Nur wenn ich einen Button weghaben möchte hört es auf mit meinem Spanisch.

Hoffe ihr habt ein paar Anregungen für mich ;).

Hier noch der Quellcode:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
       private void label_Mouseclick(object sender, MouseEventArgs e)
       {
           Label clickedLabel = sender as Label;
           Button clickedButton = sender as Button;  //*hier*

           if (Bauer_S1.Focused)
           {
               Bauer_S1.Location = clickedLabel.Location;
               loc_Bau_S1 = clickedLabel.Location.ToString();
               txtSpieler1Form3.Text = loc_Bau_S1;
               Bauer_S1.BackColor = clickedLabel.BackColor;
               clickedLabel.Focus();
           }
        }


Grüße

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt


Ralf Jansen - Mi 22.01.14 15:51

Ich habe nicht ganz verstanden was du willst. Aber ich rate mal folgendes


C#-Quelltext
1:
Button focusedButton = this.ActiveControl as Button;                    


Gizzmo - Mi 22.01.14 16:04

Hey ;).

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe nicht ganz verstanden was du willst. Aber ich rate mal folgendes

Naja, bis jetzt klicke ich einen Button an und kann ihn auf den unterschiedlichen Lables bewegen. Steht aber ein anderer Button auf einem Lable, kann ich das Lable nicht mehr anklicken, da der Button das Label verdeckt. Also soll der Button "geschlagen" werden und an den Rand verschoben werden.


user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
Button focusedButton = this.ActiveControl as Button;                    

Was genau macht diese Anweisung ? ;(

Danke für die schnelle Antwort.


Ralf Jansen - Mi 22.01.14 16:20

Die gibt dir denn gerade focussierten Button falls das gerade focussierte Control ein Button ist.

Wenn ich dich richtig verstanden habe ist dein Problem aber das ein Button im Gegensatz zu einem Label selber den Focus haben kann und sobald du drauf klickst natürlich dir den Focus von deinem vorherigen Button wegnimmt du aber wissen mußt wer zuvor focussiert war. Wen ich jetzt richtig geraten habe brauchst du einen Button der keinen Focus haben kann. Dafür müßtest du von Button ableiten und dann diesen Button anstatt den von Winforms nutzen.

Beispiel


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    public class UnfocussableButton : Button
    {
        public UnfocussableButton() : base()
        {
            SetStyle(ControlStyles.Selectable, false);
            TabStop = false;
        }
    }


Auf dem kannst du rumklicken wie du willst der bekommt nie den Focus.
Wenn du für alle Spielfiguren diesen Button benutzt kannst du dir in dessen Click Event dann selbst die angeklickten Buttons merken und dort dann testen aka

Ich bin der schwarzer Bauer an Position x,y. Die Figur(dessen Button) der zuvor angeklickte(hast du dir selbst in einer Variablen gemerkt) war das weiße Pferd an Position x,y. Das weiße Pferd kann mit einem gültigen Zug mein Feld errreichen also bewege mich runter vom Spielfeld da ich geschlagen wurde.