【问题标题】:Reference control using string with value of name使用具有名称值的字符串引用控件
【发布时间】:2013-12-12 21:00:06
【问题描述】:

在 C# 中有没有办法通过使用字符串变量的值来引用控件,在我的例子中是 TextBox?我正在使用下面的代码来制作多个控件可用于“LostFocus”事件的单一方法。然后senderTextBox 需要根据其他TextBox 的内容计算结果。问题是大约有 12 行 TextBox,虽然这段代码可以重用事件方法,但我想不出一种方法来引用正确的框,不是sender .所有的框都有相似的名称(例如 - miCellSaturation、miCellRecords、orSaturation 或 Records),所以我的想法是,如果我可以使用 Substring 命令隔离部分 TextBox 名称,然后将其与另一个字符串连接以形成完整的文本框名称,这将工作。我可以做到所有这些,但我不知道使用连接字符串来引用该框的方法。这是否需要遍历所有框,直到匹配正确的名称?

        TextBox box = (TextBox)sender;
        string boxName = box.Name;

        if(boxName.EndsWith("Saturation"))
        {

        }

【问题讨论】:

    标签: c# wpf string variables textbox


    【解决方案1】:

    不确定是否正确理解您的问题,但如果您需要找到对特定类型控件的引用,其名称以预定义的字符串结尾,那么您可以使用

    var list = YourForm.Controls.OfType<TextBox>()
                       .Where(x => x.Name.EndsWith("YourString"));
    
    foreach(TextBox t in list)
    {
       Console.WriteLine(t.Name);
       ......
    }
    

    只有当您搜索的控件直接包含在表单的控件集合中时,这才有效。如果这些文本框包含在某个控件容器中,那么您需要将这些行应用到适当的控件容器而不是表单

    【讨论】:

    • .Select(k =&gt; k) 在您的 linq 末尾是多余的:]
    • 这适用于 WPF,还是适用于 Windows 窗体?我问是因为 Intellisense 中没有弹出“.Controls”,而您使用了“YourForm”这个名称......
    • 抱歉,我没有注意到 WPF 标签。这适用于 WinForms。 Here a q/a with the same problem solved for WPF
    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2018-01-20
    相关资源
    最近更新 更多