我通过覆盖TextBox组件实现了自定义控件。它有一个名为“DbColumn”的自定义属性。我希望它像TextBox上的“Name”属性一样,这是一个Form不能在两个控件上具有相同“DbColumn”值的组件。
有没有办法将属性设置为在一个表单中具有唯一值?
答案 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)。