2009-09-30 12 views
21

मैं अपने टेक्स्टबॉक्स में कुछ करने के लिए फ़ोरैच स्टेटमेंट का उपयोग कैसे कर सकता हूं?फ़ॉर्म में फोरच कंट्रोल, मैं अपने फॉर्म में सभी टेक्स्टबॉक्स में कुछ कैसे कर सकता हूं?

foreach (Control X in this.Controls) 
{ 
    Check if the controls is a TextBox, if it is delete it's .Text letters. 
} 

उत्तर

47

आप के लिए

foreach (Control x in this.Controls) 
{ 
    if (x is TextBox) 
    { 
    ((TextBox)x).Text = String.Empty; 
    } 
} 
3

देख रहे हैं आप निम्न कर सकते हैं:

foreach (Control X in this.Controls) 
{ 
    TextBox tb = X as TextBox; 
    if (tb != null) 
    { 
     string text = tb.Text; 
     // Do something to text... 
     tb.Text = string.Empty; // Clears it out... 
    } 
} 
4
foreach (Control X in this.Controls) 
{ 
    if (X is TextBox) 
    { 
    (X as TextBox).Text = string.Empty; 
    } 
} 
58

आप सी # 3.0 या उच्चतर उपयोग कर रहे हैं आप कर सकते हैं निम्नलिखित

foreach (TextBox tb in this.Controls.OfType<TextBox>()) { 
    .. 
} 

बिना सी # 3.0 आप निम्नलिखित

foreach (Control c in this.Controls) { 
    TextBox tb = c as TextBox; 
    if (null != tb) { 
    ... 
    } 
} 

या और भी बेहतर, OfType में लिखने सी # 2.0 कर सकते हैं।

public static IEnumerable<T> OfType<T>(IEnumerable e) where T : class { 
    foreach (object cur in e) { 
    T val = cur as T; 
    if (val != null) { 
     yield return val; 
    } 
    } 
} 

foreach (TextBox tb in OfType<TextBox>(this.Controls)) { 
    .. 
} 
+0

टिप्पणी: स्पष्ट Textbox पाठ के लिए उदाहरण के लिए की तरह कुछ करना अगर आप अपने नियंत्रण के अंतर्गत एक पैनल है, तो आप निर्दिष्ट करने की आवश्यकता यह जैसे: this.myPanel.Controls.OfType (), आप का उपयोग भी कर सकते हैं। myPanel.Controls.OfType ()। जहां (x => x.Name.StartsWith ("specificName")) यदि आपको एक विशिष्ट नाम वाले comboboxes चुनने की आवश्यकता है। – Rose

+0

मुझे लगता है कि यह 'एक' फ़ॉर्म है और कोड एक ही रूप में चल रहा है। क्या होगा यदि मैं असेंबली 'विधानसभा में सभी रूपों को पढ़ना चाहता हूं। GetExecutingAssembly()। GetTypes() 'और फिर कुछ संपत्ति को संशोधित करने के लिए रनटाइम पर' नियंत्रण 'का उपयोग करें? – AaA

8

चाल है कि यहाँ Controls एक List<> या IEnumerable लेकिन एक ControlCollection नहीं है।

मैं नियंत्रण का एक विस्तार है कि कुछ more..queriyable वापस आ जाएगी उपयोग करने की अनुशंसा;)

public static IEnumerable<Control> All(this ControlCollection controls) 
    { 
     foreach (Control control in controls) 
     { 
      foreach (Control grandChild in control.Controls.All()) 
       yield return grandChild; 

      yield return control; 
     } 
    } 

तो फिर तुम कर सकते हैं:

foreach(var textbox in this.Controls.All().OfType<TextBox>) 
{ 
    // Apply logic to the textbox here 
} 
0

बस अन्य नियंत्रण प्रकार जोड़ने:

public static void ClearControls(Control c) 
{ 

    foreach (Control Ctrl in c.Controls) 
    { 
     //Console.WriteLine(Ctrl.GetType().ToString()); 
     //MessageBox.Show ((Ctrl.GetType().ToString())) ; 
     switch (Ctrl.GetType().ToString()) 

     { 
      case "System.Windows.Forms.CheckBox": 
       ((CheckBox)Ctrl).Checked = false; 
       break; 

      case "System.Windows.Forms.TextBox": 
       ((TextBox)Ctrl).Text = ""; 
       break; 

      case "System.Windows.Forms.RichTextBox": 
       ((RichTextBox)Ctrl).Text = ""; 
       break; 

      case "System.Windows.Forms.ComboBox": 
       ((ComboBox)Ctrl).SelectedIndex = -1; 
       ((ComboBox)Ctrl).SelectedIndex = -1; 
       break; 

      case "System.Windows.Forms.MaskedTextBox": 

       ((MaskedTextBox)Ctrl).Text = ""; 
       break; 

      case "Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit": 
       ((UltraMaskedEdit)Ctrl).Text = ""; 
       break; 

      case "Infragistics.Win.UltraWinEditors.UltraDateTimeEditor": 
       DateTime dt = DateTime.Now; 
       string shortDate = dt.ToShortDateString(); 
       ((UltraDateTimeEditor)Ctrl).Text = shortDate; 
       break; 

      case "System.Windows.Forms.RichTextBox": 
       ((RichTextBox)Ctrl).Text = ""; 
       break; 


      case " Infragistics.Win.UltraWinGrid.UltraCombo": 
       ((UltraCombo)Ctrl).Text = ""; 
       break; 

      case "Infragistics.Win.UltraWinEditors.UltraCurrencyEditor": 
       ((UltraCurrencyEditor)Ctrl).Value = 0.0m; 
       break; 

      default: 
       if (Ctrl.Controls.Count > 0) 
        ClearControls(Ctrl); 
       break; 

     } 

    } 
} 
0
foreach (Control x in this.Controls) 
{ 
    if (x is TextBox) 
    { 
    ((TextBox)x).Text = String.Empty; 
//instead of above line we can use 
    *** x.resetText(); 
    } 
} 
0

यह जांचें:

foreach (Control x in this.Controls) 
{ 
    if (x is TextBox) 
    { 
     x.Text = ""; 
    } 
} 
0

लिनक का उपयोग करके सरल, जैसा कि आप अपने नियंत्रण से जुड़े नियंत्रण के लिए उपयुक्त दिखते हैं।

 private void DisableButtons() 
    { 
     foreach (var ctl in Controls.OfType<Button>()) 
     { 
      ctl.Enabled = false; 
     } 
    } 

    private void EnableButtons() 
    { 
     foreach (var ctl in Controls.OfType<Button>()) 
     { 
      ctl.Enabled = true; 
     } 
    } 
0

और भी बेहतर, आप इस तरह, एक विधि में नियंत्रण के किसी भी प्रकार आप चाहते हैं स्पष्ट करने के लिए इस encapsule कर सकते हैं:

public static void EstadoControles<T>(object control, bool estado, bool limpiar = false) where T : Control 
     { 
      foreach (var textEdits in ((T)control).Controls.OfType<TextEdit>()) textEdits.Enabled = estado; 
      foreach (var textLookUpEdits in ((T)control).Controls.OfType<LookUpEdit>()) textLookUpEdits.Enabled = estado; 

      if (!limpiar) return; 
      { 
       foreach (var textEdits in ((T)control).Controls.OfType<TextEdit>()) textEdits.Text = string.Empty; 
       foreach (var textLookUpEdits in ((T)control).Controls.OfType<LookUpEdit>()) textLookUpEdits.EditValue = @"-1"; 
      } 
     } 
2

इसके अलावा, आप LINQ उपयोग कर सकते हैं। जो इस गूगल होगा उन लोगों के लिए

this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Text = string.Empty); 
संबंधित मुद्दे

 संबंधित मुद्दे