假设我在一个表单上有100个文本框。数字会进入这些文本框。
我想要一个按钮点击,它将丢弃所有空的文本框,并添加所有内部有数字的文本框。
我怎么能够?
到目前为止。这是我得到的代码。我怎么能把它们加起来呢。
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
TextBox textBox = c as TextBox;
if (textBox.Text != string.Empty)
{
//add!
}
}
答案 0 :(得分:2)
对于海量数据输入,您应该考虑使用DataGrid
而不是TextBox
- 这是因为在WinForms中,控件很昂贵 - 它们是User32管理的单个hWnd
对象 - 所以如果同时在屏幕上显示所有100个文本框,那么你的表单会有些迟缓,并且重新展开。
(实际上,您应该考虑使用WPF来构建您的UI,因为它可以更好地处理高DPI并使用"无窗口"硬件加速图形)。
无论如何,你想要一个树遍历功能来检索所有文本框,就像在@Muhammad的回答中一样,然后删除它们。我注意到你不能直接使用穆罕默德的答案,因为你在迭代控件集时无法删除控件,所以试试这个:
public static IEnumerable<Control> GetDescendantControls(this Control control)
{
Stack<Control> stack = new Stack<Control>();
stack.Push( control );
while( stack.Count > 0 )
{
Control c = nodes.Pop();
yield return c;
foreach( Control child in c.Controls ) stack.Push( child );
}
}
List<Control> allEmptyTextBoxControls = this.GetDescendantControls()
.OfType<TextBox>()
.Where( c => String.IsNullOrWhitespace( c.Text ) )
.ToList();
foreach(Control c in allEmptyTextBoxControls ) c.Parent.Controls.Remove( c );