【问题标题】:C# - Find a control by one of the propertiesC# - 通过属性之一查找控件
【发布时间】:2016-05-11 14:02:30
【问题描述】:

我创建了许多从基本控件派生的控件。作为这些扩展控件的一部分,我添加了许多属性。其中一个属性是一个唯一 ID,它可以帮助我将其绑定到数据库值。

我需要能够通过 UniqueID 搜索此控件,这是只有我的派生控件具有的属性(请注意,表单上的所有控件都是我的派生控件,并且所有控件都具有 UniqueID 作为属性)。反思跳到脑海,但我找不到一个例子。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    使用Enumerable.OfType<T> 过滤掉特定类型的控件,然后您可以查询特定属性,例如:

    var controls = this.Controls.OfType<YourControl>().Where(r => r.UniqueId == someValue);
    

    请记住,这只搜索根级别的控件,如果您对查找嵌套控件感兴趣,则必须使用递归方法。见:How to get ALL child controls of a Windows Forms form of a specific type (Button/Textbox)?

    【讨论】:

    • 好答案。如果每个控件都不同,它会如何变化?例如,如果我有一个 MyTextBox : TextBox 和 MyComboBox : ComboBox。我需要使用 Controls.OfType() 吗?
    • 当然你可以在这种情况下使用基类,但是如果你使用Control基类那么它不仅限于你上面指定的类,它还将包括其他控制类,像按钮等。
    • 其实没关系。那里唯一的控件是我创建的控件,所有控件都包含该属性。感谢您的帮助:)
    • 测试后我有一个编译时错误,因为 Control 没有我正在寻找的属性。由于控件不是来自同一个地方,是否有替代方法?
    • @RyanHargreaves,如果控件不是来自同一个地方,那么您可能不得不求助于反射。
    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2012-07-08
    相关资源
    最近更新 更多