C#在表单中添加所有TextBox

时间:2017-03-04 00:53:05

标签: c# winforms

假设我在一个表单上有100个文本框。数字会进入这些文本框。

我想要一个按钮点击,它将丢弃所有空的文本框,并添加所有内部有数字的文本框。

我怎么能够?

到目前为止。这是我得到的代码。我怎么能把它们加起来呢。

    foreach (Control c in this.Controls)
    {
        if (c is TextBox)
        {
            TextBox textBox = c as TextBox;
            if (textBox.Text != string.Empty)
            {
                //add!
            }
        }

1 个答案:

答案 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 );