C# Windows Forms erkennen welcher Button gedrückt worden ist?
Hey,
Ich bin jetzt gerade in der Ausbildung zum Informatiker Applikationsentwickler und arbeite gerade mit C# Windows Forms App.
Nun möchte ich ein kleines Programm machen, das Schiffchen versenken darstellt.
Ich will das mit Buttons machen, also die Felder.
Es soll ein Random generiertes Schiff auf dem Spielfeld spawnen und der Spieler soll durch klicken auf die Buttons herrausfinden wo sich das Schiff versteckt. Nun ist meine Frage, wie kann ich machen, das ich erkenne welcher Button gedrückt wurde?
Weil ich will nicht jeden Button doppelklicken müssen und dann dort was hineinschreiben müssen. Sagen wir das Spielfeld ist jetzt 10x10 gross. Das wären 100 Buttons die ich programmieren müsste.
Vielen Dank für Hilfe :)
Grüsse
3 Antworten
Hallo,
wie triopasi schon sagt, würde ich nicht 100 Buttons mit XAML aufsetzen, sondern normal coden:
In einer Schleife
Button[100] buttons;
// Code für den Grid
for(int i=0;i<100;i++){
buttons[i]=new Button();
buttons.[i].click+=new Eventhandler(Deine_Aktion); // hier kannst Du mit
// mit if die jeweiligen Aktionen verschiedenen Eventhandler zuordnen
// würde ich jetzt aber nicht, wenn man im Event die Koordinate abfragt
// Button innerhalb der Schleife in Grid einfügen, auch über Index buttons[i].
}
Ich bin jetzt nicht wirklich der C#-Freak, deswegen hier nur ganz grob.
Wenn du die Buttons als 10x10 Feld anzeigst, solltest du vllt auch n 10x10 Array nutzen. Dann ist button [0,0] oben links in der Ecke und button [9,9] unten rechts.
Als Eventhandler rufst du dann einfach immer "handle (x, y)" auf, wobei x und die "Koordinaten" des Buttons sin. Die Funktion "handle (...)" macht dann alles weitere.
Vielen Dank für die schnelle Antwort. Ich weis leider noch nicht so viel über C#. Darum wäre ich sehr froh, wenn du mir irgendein Beispiel zeigen könntest.
Ich komme bei deinem Beispiel oben nicht ganz so draus...
Schon mal was von Events gehört? So handhabt man click-Events.
Kannst ja mit ner Schleife Buttons erstellen und die Events binden.
Vielen Dank für die schnelle Antwort. Ich weis leider noch nicht so viel über C#. Darum wäre ich sehr froh, wenn du mir irgendein Beispiel zeigen könntest. Am besten mir irgendwie 10 Buttons. So dass ich das besser verstehe :)
Die Methode, die das Click-Event verarbeitet bekommt einen Parameter "Sender". Das ist die Referenz auf den jeweiligen Button, Du brauchst ihn nur zu casten:
var button = Sender as MeinKoordinatenButton;
if (button)
{
....
}