Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

ComboBox değerlerine göre TextBox'ların enable özelliğini değiştirmek

Merhaba,

Windows formumda 50 adet ComboBox bulunuyor. ComboBox isimleri ise cmb1,cmb2,...cmb50 diye devam ediyor.

ve 50 adet TextBox bulunuyor. TextBox isimleri ise txt1,txt2,...txt50 diye devam ediyor.

Örnek verirsek;

cmb1 text değeri boş olmadığında yan tarafında bulunan txt1'in enable özelliğini true yapmak istiyorum.

Bazı kodlar yazdım ancak ComboBox'lardan herhangi biri değiştiği zaman tüm TextBoxlar'ın enable özelliğini true yapıyor. 

...public IEnumerable<Control> GetAll(Control control, Type type)
        {
            var controls = control.Controls.Cast<Control>();

            return controls.SelectMany(ctrl => GetAll(ctrl, type))
                                      .Concat(controls)
                                      .Where(c => c.GetType() == type);
        }

        private void cmb1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            var allControls = GetAll(this, typeof(ComboBoxEdit));
            var allControls2 = GetAll(this, typeof(TextEdit));

            foreach (var combo in allControls)
            {
                for (int i = 1; i <= 50; i++)
                {
                    string name = string.Format("{0}{1}", "cmb", i);
                    string name2 = string.Format("{0}{1}", "txtİsim", i);

                    if (combo.Name == name && combo.Text != null)
                    {
                        foreach (var text in allControls2)
                        {
                            if (text.Name == name2)
                            {
                                text.Enabled = true;
                            }
                        }
                    }
                }
            }

Galiba if  sorgularında kullandığım "combo.Text != null" ve " text.Enabled = true;" kodları tüm kontrolleri içerdiğinden hata alıyorum. İstediğim özelleştirmeyi yapamadım. Her ComboBox için ayrı ayrı kod da yazmak istemiyorum :)

Yardımlarınızı bekliyorum. Teşekkürler.


Soran: 29.01.20 11:58
hakanndogann
111p 4ü

2 Cevap

0
        private void cmb1_SelectedIndexChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < this.Controls.Count; i++)
            {
                Control ctrl1 = this.Controls[i];
                if (ctrl1 is ComboBox && ctrl1.Name.StartsWith("cmb"))
                {
                    String tbName = "text" + ctrl1.Name.Replace("cmb", "");
                    Control ctrl2 = this.Controls.Find(tbName, true).FirstOrDefault();
                    if (ctrl2 != null && ctrl2 is TextBox)
                    {
                        ((TextBox)ctrl2).Enabled = ((ComboBox)ctrl1).SelectedIndex > -1;
                    }
                }
            }
        }

Bu dediğini yapar. Ancak eğer gerekliyse başlangıçta ön ayar için uygun bir yerde, muhtemelen ComboBox'lara değerlerini atadıktan sonra aşağıdakini çalıştır.

cmb1_SelectedIndexChanged(new Object(), EventArgs.Empty);


Cevaplayan: 30.01.20 22:11
cevapsitesi
102,034p 15ü
0
Devexpress kullandığım için çalışmıyor galiba.

Şu şekilde değiştirmiştim.

...

  • private void cmb1_SelectedIndexChanged(object sender, EventArgs e)
  • {
  • for (int i = 0; i < this.Controls.Count; i++)
  • {
  • Control ctrl1 = this.Controls[i];
  • if (ctrl1 is ComboBoxEdit && ctrl1.Name.StartsWith("cmb"))
  • {
  • String tbName = "text" + ctrl1.Name.Replace("cmb", "");
  • Control ctrl2 = this.Controls.Find(tbName, true).FirstOrDefault();
  • if (ctrl2 != null && ctrl2 is TextEdit)
  • {
  • ((TextEdit)ctrl2).Enabled = ((ComboBoxEdit )ctrl1).SelectedIndex > -1;
  • }
  • }
  • }
  • }


  • Cevaplayan: 03.02.20 17:52
    hakanndogann
    111p 4ü