获取表单的所有文本框,其名称按升序排列
Get all textboxes of an form with their name in ascending order
我在表单中总共有 36 个文本框,文本框的名称为 txtBox1、txtBox2..... 到 txtBox36。其中一些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
您可以使用 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];
这是一个递归获取控件的函数,它在容器的情况下很有用:
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);
我在表单中总共有 36 个文本框,文本框的名称为 txtBox1、txtBox2..... 到 txtBox36。其中一些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
您可以使用 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];
这是一个递归获取控件的函数,它在容器的情况下很有用:
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);