什么用于System.Windows.Forms.Control.ControlCollection中的键?

时间:2012-01-03 16:57:24

标签: c# .net winforms

因此,System.Windows.Forms.Control的{​​{1}}属性类型为Controls。我在一个表单上有一个控件,在这个集合中有一堆小的子控件。这些子控件有一个标签和一个文本标识符,它是数据库中的字段名称。

我需要能够返回Control.ControlCollection集合并按名称查找控件。 ControlsControlCollectionpublic 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的文档说关键参数是“定位的关键”,这样做的帮助就更小了。

找到了答案,但我已经写了所有这些,所以我不妨发布它然后自我回答以防其他人可能觉得它有用......

1 个答案:

答案 0 :(得分:7)

虽然我无法覆盖Name属性,但它是{get; set;},而不是纯粹的{get;},正如我愚蠢地假设的那样。因此,如果我将控件的Name设置为数据库字段名称,然后再将其添加到Controls集合中,我可以按预期查找它。

答案在Control[] Find(string key, bool searchAllChildren)方法的摘要文档中,而不是我将要使用的函数的文档: “通过System.Windows.Forms.Control.Name属性搜索控件,并构建一个匹配的所有控件的数组。”