首页 > 解决方案 > 当每个文本框的名称发生变化时如何获取窗口窗体的所有文本框名称

问题描述

当我运行我的表单时,我只想在标签中获取运行时活动表单的所有文本框的名称。

我搜索了很多,但我发现的只是他们没有更改文本框名称的内容。

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

标签: c#winforms

解决方案


您的代码示例和您想要的解释令人困惑。如果您想要一个表单中所有文本框名称的数组:

string[] GetTexBoxNames()
{
    var names =new List<string>();
    for each(var c in this.Controls)
    {
        if(c is TextBox)
        {
            names.Add(c.name);
        }
    }
    return names.ToArray();
}

短语“this”是指形式。如果您想在表单之外进行此计算,请将该关键字替换为引用它的变量。

您还可以使用 lamda 表达式在单个表达式中获取数组中的所有文本框。

var textBoxNames = this.Controls
                 .Where(i => i is TextBox)
                 .ToArray();

您可能想要的另一件事是所有文本框的字典,以它们的名称作为键。除非查找速度很关键,否则您不需要这个,因为您可以使用 lamda 在最终数组中查找文本框,这比字典查找要慢。您可以使用一个简单的 for 循环遍历每个文本框并按名称将它们放入字典中。

如果我弄错了,您可能可以编辑此代码以满足您的目的。请澄清,我也会更新这个答案。


推荐阅读