Çözüldü C#'da seçilen butonların namelerini nasıl alabilirim?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

CeyhunCeyyy

Hectopat
Katılım
1 Nisan 2020
Mesajlar
334
Çözümler
3
Yer
Zonguldak
Daha fazla  
Cinsiyet
Erkek
Meslek
Bilgi İşlem Sorumlusu
Merhaba. C# üzerinde basit bir program yazmaya çalışıyorum takıldığım bir nokta var yardımlarınızı bekliyorum.
Sorum: Groupbox içinde 80 tane buton var bu butonları makine olarak düşünelim aktif haldemi pasif haldemi bunları görmek için onları kırmızı ve yeşile ayıracağım fakat 80 tane buton var ve hepsinin Click eventine kod yazmak yerine tıklanan butonun name Text'ini alabileceğim bir Event tarzı bir şey var mıdır? Çok teşekkür ederim yanıtlarınız için.
 
Çözüm
Kod:
foreach (Button button in this.Controls)
{
    button.Click += (s, args) =>
    {
        var clickedButton = (Button)s;
        var text = clickedButton.Text;
    };
}

Formun Load eventine koyun bu kodu. clickedButton size tıklanılan referansını dönmekte şu an. İstediğiniz işlemi uygulayabilirsiniz.
Kod:
foreach (Button button in this.Controls)
{
    button.Click += (s, args) =>
    {
        var clickedButton = (Button)s;
        var text = clickedButton.Text;
    };
}

Formun Load eventine koyun bu kodu. clickedButton size tıklanılan referansını dönmekte şu an. İstediğiniz işlemi uygulayabilirsiniz.
 
Çözüm
Kod:
foreach (Button button in this.Controls)
{
 button.Click += (s, args) =>
 {
 var clickedButton = (Button)s;
 var text = clickedButton.Text;
 };
}

Formun load eventine koyun bu kodu. Clickedbutton size tıklanılan referansını dönmekte şu an. İstediğiniz işlemi uygulayabilirsiniz.

Çok teşekkür ederim hocam :)

Maalesef ayarlayamadım aslında yapmak istediğim oldukça basit bir şey ama nedense olmadı groupbox kullanmam sebebiyle hatada verdi kod radio butondan aktif veya deaktif olarak seçip yeşil veya kırmızı yapmak istiyorum ama maalesef yapamadım.
 
Son düzenleme:
Tam olarak anlayamadım hocam daha açık anlatabilir misiniz?

Şu şekilde anlatayım hocam group box içinde 80 adet buton var bu butonlar çalışan veya çalışmayan 80 makineyi temsil ediyor. Bu makinelerin çalıştığını veya çalışmadığını görmek için onları kırmızı ve yeşil renklerde ayıracağım ek olarak çalışmayan bir makine çalışmaya başladığı zaman ise radiobuttondan çalışıyor'u seçip button ile kayıt edeceğim ya da çalışmıyorsa artık çalışmıyor seçeceğim ve kayıt edeceğim. Bu dediğimi yapmak için 80 tane butonun name kısımlarını almam gerekki radio butonlarda çalışıyor veya çalışmıyor seçerken renk değişimi yapabileyim aynı anda her butonun Click eventine kod yazarakda yapılabilir ama oldukca vakit alır ve kod fazlalığı olur bunu önlemek istiyorum örneğin radio Button'a basılınca olacak işlem şu:

Kod:
if (radioButton1.Checked == true)
 {
 button68.BackColor = Color.Green;
 radioButton1.Checked = false;
 }
 else if (radioButton2.Checked == true)
 {
 button68.BackColor = Color.Red;
 radioButton2.Checked = false;
 }

Şu şekilde anlatayım hocam group box içinde 80 adet buton var bu butonlar çalışan veya çalışmayan 80 makineyi temsil ediyor. Bu makinelerin çalıştığını veya çalışmadığını görmek için onları kırmızı ve yeşil renklerde ayıracağım ek olarak çalışmayan bir makine çalışmaya başladığı zaman ise radiobuttondan çalışıyor'u seçip button ile kayıt edeceğim ya da çalışmıyorsa artık çalışmıyor seçeceğim ve kayıt edeceğim. Bu dediğimi yapmak için 80 tane butonun name kısımlarını almam gerekki radio butonlarda çalışıyor veya çalışmıyor seçerken renk değişimi yapabileyim aynı anda her butonun Click eventine kod yazarakda yapılabilir ama oldukca vakit alır ve kod fazlalığı olur bunu önlemek istiyorum örneğin radio Button'a basılınca olacak işlem şu:

Kod:
if (radioButton1.Checked == true)
 {
 button68.BackColor = Color.Green;
 radioButton1.Checked = false;
 }
 else if (radioButton2.Checked == true)
 {
 button68.BackColor = Color.Red;
 radioButton2.Checked = false;
 }

Burada button68 için işlem yaptırıyorum ben bunu eğer mümkünse tek kodda 80 buton için yaptırmak istiyorum.
 
Dediğim kodla yapabiliyor olmanız gerekiyor. Nasıl bir hatayla karşılaşıyorsunuz?

Kod:
foreach (Button button in this.[groupBoxName].Controls)
{
    button.Click += (s, args) =>
    {
        var clickedButton = (Button)s;
        var text = clickedButton.Text;
    };
}

olarak da deneyebilirsiniz.
 
Sizin verdiğiniz yöntem işime yaradı fakat sanırım daha kolay bir yöntem buldum buraya bırakıyorum:

Kod:
private void button68_MouseClick(object sender, MouseEventArgs e)
 {
 if (radioButton1.Checked == true)
 {
 Button current = (Button)sender;
 current.BackColor = Color.LimeGreen;
 }
 else if (radioButton2.Checked == true)
 {
 Button current = (Button)sender;
 current.BackColor = Color.Red;
 }

 }

Sizin verdiğiniz yöntem işime yaradı fakat sanırım daha kolay bir yöntem buldum buraya bırakıyorum:

Kod:
private void button68_MouseClick(object sender, MouseEventArgs e)
 {
 if (radioButton1.Checked == true)
 {
 Button current = (Button)sender;
 current.BackColor = Color.LimeGreen;
 }
 else if (radioButton2.Checked == true)
 {
 Button current = (Button)sender;
 current.BackColor = Color.Red;
 }

 }

Burada 80 tane button seçili iken mouse Click itemi kullandım :D daha sonra bu butonlardaki ada göre textboxlara veri cekeceğim ama inşallah böyle sorunsuz olmuştur :D
 

Yeni konular

Geri
Yukarı