因此,System.Windows.Forms.Control
的{{1}}属性类型为Controls
。我在一个表单上有一个控件,在这个集合中有一堆小的子控件。这些子控件有一个标签和一个文本标识符,它是数据库中的字段名称。
我需要能够返回Control.ControlCollection
集合并按名称查找控件。 Controls
有ControlCollection
和public virtual Control this[string key] { get; }
,所以看起来我应该能够查找它们。
但是,添加功能(public virtual bool ContainsKey(string key)
)不会使用关键字符串,只会添加您要添加的public virtual void Add(Control value)
,而且我对System.Windows.Forms.Control
的所有调用都会返回false。< / p>
必须重写ContainsKey
上的某些内容才能成为密钥(因为只传递了Control
),我试图覆盖Control
以返回数据库字段名称(我'我想用于查找),但是当我知道指定字段的控件存在时,ToString()
仍然返回false。
ContainsKey
的文档说关键参数是“要从控件集合中检索的控件的名称”。 this[string key] { get; }
没有我可以覆盖的Name属性,它唯一的Name属性包含类名,对于我添加的每个控件都是相同的。 Control
的文档说关键参数是“定位的关键”,这样做的帮助就更小了。
找到了答案,但我已经写了所有这些,所以我不妨发布它然后自我回答以防其他人可能觉得它有用......
答案 0 :(得分:7)
虽然我无法覆盖Name
属性,但它是{get; set;},而不是纯粹的{get;},正如我愚蠢地假设的那样。因此,如果我将控件的Name
设置为数据库字段名称,然后再将其添加到Controls
集合中,我可以按预期查找它。
答案在Control[] Find(string key, bool searchAllChildren)
方法的摘要文档中,而不是我将要使用的函数的文档:
“通过System.Windows.Forms.Control.Name属性搜索控件,并构建一个匹配的所有控件的数组。”