judo99
Goto Top

C-Sharp Variable Zuordnung

Hallo liebe Communitiy
Ich habe folgende Fragen:

Ich habe eine Windows Form mit 168 Buttons, die alle nach Zeile und Spalte benannt werden sollen (12 Zeilen und 14 Spalten)
Daraus ergibt sich die erste Frage: Kann man den Buttons schnell einen Namen zuweisen oder muss ich jedem einzelnen Button seinen eigenen Namen geben?
Klickt man nun auf einen dieser Buttons, so wird er gelb (vorher grün).
Gibt es eine Methode, die nun auf Knopfdruck die angewählten, also gelben, Buttons rot färbt?
Und gibt es eine Lösung wie man das Gelbfärben automatisiert ohne für jeden Button einzeln den Code einzufügen?

Vielen Dank im Vorraus!
Mit freundlichen Grüßen
Judo99
sitzplan

Content-Key: 324652

Url: https://administrator.de/contentid/324652

Ausgedruckt am: 19.03.2024 um 02:03 Uhr

Mitglied: wiesi200
wiesi200 23.12.2016 aktualisiert um 18:22:06 Uhr
Goto Top
Hallo,

also so als Anregung.
Ich würde die Buttons dynamisch erzeugen und nicht alle einzeln per GUI Platzieren. Somit kannst du die Namen auch automatisch zuweisen.
Zwei schleifen verschachtelt für Zeilen und Spalten.

Dann kannst du bei allen den gleichen Event Handler hinterlegen. Mit diesem kannst du dann den "Sender" auslesen und die entsprechende Aktion vorbereiten.

Und das rot Färben kannst du über eine schleifen erledigen du über alle Buttons geht, dann überprüfen ob Farbe gelb und die ändern in rot.

Edit: hab mal kurz was getestet
Den Eventhandler muss eigentlich nur das ausführen. Dann wird der "Sender" sprich dein gedrückter Button gelb.

 Button b = (Button)sender;
 b.BackColor = Color.Yellow;
Mitglied: Judo99
Judo99 24.12.2016 um 13:16:38 Uhr
Goto Top
Wie kann man denn Steuerelementen einen variablen Namen zuweisen?
Also dann in meinem all ja am Besten den, einer Variable...

Ich hab gerade das Internet durchforstet und bin nicht fündig geworden.

@wiesi200 Ich danke dir für deine hilfreiche Antwort!

Frohe Weihnachten!
Mitglied: 131381
131381 26.12.2016 aktualisiert um 13:32:33 Uhr
Goto Top
Wie @wiesi200 schon schreibt, alle Buttons nicht per GUI erstellen sonder programmatisch und den Eventhandler für alle Buttons gleich setzen.

Hier ein Beispiel:
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            const int numRows = 3;
            const int numCols = 3;
            for (int r = 0; r < numRows; r++) {
                for(int c = 0 ;c < numCols;c++){
                    Button b = new Button();
                    b.Location = new Point(c * 130, (r * 30));
                    b.Size = new Size(120, 25);
                    b.Text = String.Format("Button R{0} C{1}",r,c);  
                    b.Name = String.Format("Button_R{0}C{1}", r, c);  
                    b.BackColor = Color.LightGreen;
                    b.Click += new EventHandler(b_Click);
                    this.Controls.Add(b);
                }
            }
        }

        // Handler der die Klicks auf alle Buttons regelt
        void b_Click(object sender, EventArgs e) {
            Button b = (Button)sender;
            b.BackColor = Color.Yellow;
            //MessageBox.Show("I am Button with Instancename: " + b.Name); 
        }

        // Prozedur die alle gelb gefärbten Buttons auf Rot setzt
        private void btnResetYellow_Click(object sender, EventArgs e) {
            var yellowButtons = from Control b in this.Controls where b.BackColor == Color.Yellow select b;
            foreach (Control b in yellowButtons) {
                b.BackColor = Color.Red; 
            }
        }
    }
}
Gruß mik