自定义组件属性具有唯一值

时间:2012-04-20 08:46:23

标签: c# winforms textbox custom-controls

我通过覆盖TextBox组件实现了自定义控件。它有一个名为“DbColumn”的自定义属性。我希望它像TextBox上的“Name”属性一样,这是一个Form不能在两个控件上具有相同“DbColumn”值的组件。

有没有办法将属性设置为在一个表单中具有唯一值?

2 个答案:

答案 0 :(得分:0)

您可以使用随机数或计数器在构造函数中初始化它。如果选择计数器,则需要检查该类的所有其他对象,找到最大的数字并使用此数字加1。

答案 1 :(得分:0)

如果运行时检查已足够,请尝试实施System.ComponentModel.ISupportInitialize并将检查逻辑添加到EndInit()

public class MyTextBox : TextBox, ISupportInitialize
{
     ...
     public string DbColumn { get; set; }

     public void BeginInit() { }
     public void EndInit()
     {
         bool duplicatesFound = Parent.Controls
             .OfType<MyTextBox>()
             .GroupBy(mtb => mtb.DbColumn)
             .Any(x => x.Count() > 1);

         if (duplicatesFound)
             throw InvalidOperationException("MyTextBoxes with duplicate DbColumn property found."); 
     }
}

这种格式非常昂贵,但可以轻松优化,以便为每个父容器执行一次检查,而不是n次(对于n个MyTextBoxes)。