2017-02-02 44 views
1

我的文本框的名稱爲txtBox1,txtBox2 ..... txtBox36,共有36個文本框。其中一些textBox被填充在form_load事件中。獲取表單的所有文本框的名稱以升序排列

我想要獲得所有文本框名稱是空的升序。

我曾嘗試:

foreach (Control control in this.Controls) 
{ 
    if (control is TextBox) 
    { 
     if (String.IsNullOrEmpty(control.Text)) 
     { 
      for (int j = 1; j <= 36; j++) 
      { 
       MessageBox.Show(control.Name.ToString()); 
      } 
     } 
    } 
} 

它是什麼讓是按照隨機順序

txtBox26 
txtBox28 
txtBox31 
txtBox34 
txtBox33 
txtBox30 
txtBox27 
txtBox29 
txtBox25 
txtBox14 
txtBox16 
txtBox19 
txtBox21 
txtBox18 
txtBox17 
txtBox23 
txtBox24 
txtBox13 
txtBox7 
txtBox10 
txtBox6 
txtBox3 
txtBox11 
txtBox12 

回答

5

您可以使用LINQ讓所有按名稱進行排序文本框:

var allTexboxes = this.Controls.OfType<TextBox>(); 
var sortedTextBoxes = allTexboxes 
        .Where(i => String.IsNullOrEmpty(i.Text)) 
        .OrderBy(i => i.Name) 
        .ToArray(); 

然後你可以通過這種方式得到名字:

var name = sortedTextBoxes[0].Name; 

如果你只想名作爲字符串數組:

var allTexboxes = this.Controls.OfType<TextBox>(); 
var sortedNames = allTexboxes 
       .Where(i => String.IsNullOrEmpty(i.Text)) 
       .OrderBy(i => i.Name) 
       .Select(i => i.Name) 
       .ToArray(); 

,並獲得名字:

var name = sortedNames[0]; 
+0

&& String.IsNullOrEmpty((TextBox)i.Text) – Esko

+0

除了'使用Linq;'之外,你還需要什麼嗎?我嘗試了它的興趣,並得到一個錯誤,說'ControlCollection不包含Where'的定義。 – Equalsk

+0

是的,它是給錯誤,@Equalsk我只是想按升序檢索文本框名稱。對不起,我很喜歡這裏。 – Sdp

1

這裏是recursivly歌廳控制功能,它可以在容器的情況下是有用:

public static List<T> GetControls<T>(this Control _mainControl, int _maxDepth = 10) where T : Control 
    { 
     if (_maxDepth < 0) 
      return new List<T>(); 

     List<T> ObjectList = new List<T>(); 

     foreach (Control CurrentControl in _mainControl.Controls) 
     { 
      if (CurrentControl is T) 
      { 
       ObjectList.Add(CurrentControl as T); 
      } 
      else 
      { 
       ObjectList.AddRange(CurrentControl.GetControls<T>((_maxDepth - 1))); 
      } 
     } 
     return ObjectList; 
    } 

然後你可以這樣做:

var OrderedTextboxes = this.GetControls<TextBox>().OrderBy(x => x.Name); 
相關問題