none
Çoklu butonlardan rastgele birinin üzerinde işlem yapma RRS feed

  • Soru

  • Herkese iyi akşamlar. Şöyle bir sorunumuz var; Formun üzerinde diyelim ki 10 adet buton var. Ben bunların dışında bir butona tıkladığımda 1 ile 10 arasında bir sayı tutulacak. Örneğin; tutulan sayı 7 olsun. button7'nin rengini değiştirecek. Bunu if ile yapıyoruz. Şöyle ki;

    Random rastgele = new Random();
    int sayi = rastgele.Next(1,11);
    if (sayi == 1)
        button1.BackColor = Color.Red;
    if (sayi == 2)
        button2.BackColor = Color.Red;
    if (sayi == 3)
        button3.BackColor = Color.Red;

    Ama bu çözüm buton sayısı arttıkça çok hantal bir yapı oluşturuyor. Bunu kısa bir yolu var mı acaba?

    foreach (Control i in this.Controls)
                {
                    if (i.GetType().Name == "Button")
                    {
                        ((Button)i).BackColor = Color.Red;
                    }
                }
    bu yapıyı denedim ama bunda tüm butonlar renk değiştiriyor. Buton numarasına dizi gibi erişme imkanımız var mı? Yada nasıl bir çözümü var acaba?

    11 Aralık 2018 Salı 17:27

Yanıtlar

  • Önceki yanıtımla birlikte Form1_Load metodunda,

    int index = 1;
    Controls.OfType<Button>().ToList().ForEach(b => b.Tag = index++);

    kullanın.

    Not : Önceki yanıtımı durumunuza uygun olarak güncelledim.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    • Düzenleyen MuratAKSARAY 11 Aralık 2018 Salı 20:20
    • Yanıt Olarak İşaretleyen acipinarli 11 Aralık 2018 Salı 20:33
    11 Aralık 2018 Salı 20:20
  • Önceki yanıtımla birlikte Form1_Load metodunda,

    int index = 1;
    Controls.OfType<Button>().ToList().ForEach(b => b.Tag = index++);

    kullanın.

    Not : Önceki yanıtımı durumunuza uygun olarak güncelledim.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    teşekkürler. düzenlediğiniz şekilde alınca oldu. sanırım tag kullanmadan olmuyor. yanlış anlamadım değil mi?
    edit : her tıklamada sadece bir buton renk değişti ama tutulan sayıyı formun text'ine yazınca sayı ile butonun alakası olmadığını fark ettim. mesela sayı olarak 4 tutuyor ama buton9 renk değiştiriyor.

    edit2: kodları satır satır (f11) çalıştırınca sorunun ne olduğunu da anladım. Butonları ctl içine en büyük butondan başlayarak atıyor. yani 10 buton var birde tıklanacak buton var toplamda 11. button11'in tag'ına 1, button10'un tag'ına 2 ... yazıyor. taglarla buton sıralaması ters.  Load olayındaki kodu;

    int index = 10;
    Controls.OfType<Button>().ToList().ForEach(b => b.Tag = index--);
    yapınca düzeldi.
    • Düzenleyen acipinarli 11 Aralık 2018 Salı 21:05
    • Yanıt Olarak İşaretleyen acipinarli 11 Aralık 2018 Salı 21:05
    11 Aralık 2018 Salı 20:34

Tüm Yanıtlar

  • Random rastgele = new Random();
    int sayi = rastgele.Next(1,11);
    Controls.OfType<Button>().ToList().ForEach(b => 
    {
        if (Convert.ToInt32(b.Tag) == sayi)
        {
            b.BackColor = Color.Red;
        }
        else
        {
            b.BackColor = SystemColors.Control;
        }
    });

    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    • Düzenleyen MuratAKSARAY 11 Aralık 2018 Salı 20:16 Eski sürüm VS
    11 Aralık 2018 Salı 18:31
  • Random rastgele = new Random();
    int sayi = rastgele.Next(1,11);
    Controls.OfType<Button>().ToList().ForEach(b => 
    {
        if (b.Name.IndexOf($"{sayi}") > -1)
        {
            b.BackColor = Color.Red;
        }
        else
        {
            b.BackColor = SystemColors.Control;
        }
    });

    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    hata veriyor maalesef.


    • Düzenleyen acipinarli 11 Aralık 2018 Salı 18:59
    11 Aralık 2018 Salı 18:58
  • Visual Studio 'nun en son sürümünü kullanın.

    www.cihanyakar.com

    11 Aralık 2018 Salı 19:03
  • o kısımda düzenleme yapınca da yukarıdaki gibi bir sorun çıktı karşıma.

    biraz araştırınca tag özelliğini kullanmak geldi aklıma tüm butonların tag özelliğine sırayla (1,2,3,...) bir numara verdim ve aşağıdaki kodları yazdım. çalışıyor ama her butona tek tek tag yazmak zahmetli gibi geldi.

    kod şu şekilde;

    Random rastgele = new Random();
    int sayi = rastgele.Next(1, 11);
    this.Text = sayi.ToString();
    foreach (Control ctl in this.Controls)
    if (ctl is Button)
    {
        if (((Button)ctl).Tag.ToString() == sayi.ToString())
             {
                ((Button)ctl).BackColor = Color.Red;
             }
        else
                ((Button)ctl).BackColor = Color.Yellow;
    }

    • Düzenleyen acipinarli 11 Aralık 2018 Salı 19:11
    11 Aralık 2018 Salı 19:05
  • Visual Studio 'nun en son sürümünü kullanın.

    www.cihanyakar.com

    maalesef okulda öyle bir şansımız olmuyor. 2010 kullanmak zorundayız. bilgisayarlar eski olunca sistemi zorlar. eğer bu şekilde 2017'de sorunsuz çalışırsa teşekkürler.
    • Düzenleyen acipinarli 11 Aralık 2018 Salı 19:30
    11 Aralık 2018 Salı 19:29
  • Önceki yanıtımla birlikte Form1_Load metodunda,

    int index = 1;
    Controls.OfType<Button>().ToList().ForEach(b => b.Tag = index++);

    kullanın.

    Not : Önceki yanıtımı durumunuza uygun olarak güncelledim.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    • Düzenleyen MuratAKSARAY 11 Aralık 2018 Salı 20:20
    • Yanıt Olarak İşaretleyen acipinarli 11 Aralık 2018 Salı 20:33
    11 Aralık 2018 Salı 20:20
  • Önceki yanıtımla birlikte Form1_Load metodunda,

    int index = 1;
    Controls.OfType<Button>().ToList().ForEach(b => b.Tag = index++);

    kullanın.

    Not : Önceki yanıtımı durumunuza uygun olarak güncelledim.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...


    teşekkürler. düzenlediğiniz şekilde alınca oldu. sanırım tag kullanmadan olmuyor. yanlış anlamadım değil mi?
    edit : her tıklamada sadece bir buton renk değişti ama tutulan sayıyı formun text'ine yazınca sayı ile butonun alakası olmadığını fark ettim. mesela sayı olarak 4 tutuyor ama buton9 renk değiştiriyor.

    edit2: kodları satır satır (f11) çalıştırınca sorunun ne olduğunu da anladım. Butonları ctl içine en büyük butondan başlayarak atıyor. yani 10 buton var birde tıklanacak buton var toplamda 11. button11'in tag'ına 1, button10'un tag'ına 2 ... yazıyor. taglarla buton sıralaması ters.  Load olayındaki kodu;

    int index = 10;
    Controls.OfType<Button>().ToList().ForEach(b => b.Tag = index--);
    yapınca düzeldi.
    • Düzenleyen acipinarli 11 Aralık 2018 Salı 21:05
    • Yanıt Olarak İşaretleyen acipinarli 11 Aralık 2018 Salı 21:05
    11 Aralık 2018 Salı 20:34
  • Visual Studio 'nun en son sürümünü kullanın.


    www.cihanyakar.com

    maalesef okulda öyle bir şansımız olmuyor. 2010 kullanmak zorundayız. bilgisayarlar eski olunca sistemi zorlar. eğer bu şekilde 2017'de sorunsuz çalışırsa teşekkürler.

    Bu ön yargı mı yoksa denediniz ve yavaş mı çalıştı? Microsoft :

    VS2010 için 1.6GHz işlemci ve 1.5GB RAM öneririm,
    VS2017 için 1.8GHz işlemci ve Min 2GB RAM isterim 4GB öneririm,
    VS2019 için 1.8GHz işlemci ve Min 2GB RAM isterim 8GB öneririm diyor.

    Bence RAM konusunda sıkıntınız yoksa bir şans verin.


    www.cihanyakar.com



    13 Aralık 2018 Perşembe 20:02
  • Visual Studio 'nun en son sürümünü kullanın.


    www.cihanyakar.com

    maalesef okulda öyle bir şansımız olmuyor. 2010 kullanmak zorundayız. bilgisayarlar eski olunca sistemi zorlar. eğer bu şekilde 2017'de sorunsuz çalışırsa teşekkürler.

    Bu ön yargı mı yoksa denediniz ve yavaş mı çalıştı? Microsoft :

    VS2010 için 1.6GHz işlemci ve 1.5GB RAM öneririm,
    VS2017 için 1.8GHz işlemci ve Min 2GB RAM isterim 4GB öneririm,
    VS2019 için 1.8GHz işlemci ve Min 2GB RAM isterim 8GB öneririm diyor.

    Bence RAM konusunda sıkıntınız yoksa bir şans verin.


    www.cihanyakar.com



    geç gördüm kusura bakmayın ama bilgisayarlarımız eski derken ramlar en çok 1.5 gb. 
    6 Mart 2019 Çarşamba 20:00
  • Ram bu kadar az ise haklısınız.

    www.cihanyakar.com

    6 Mart 2019 Çarşamba 21:33