如果我们的UserControl要求某些属性设置为有用,那么确保它们设置的最佳方法是什么?即使只是作为自我和/或亲密同事的记录。
我们已经尝试过使用Initialize方法,但是这已经让我们感到困惑,因为我们忘记在一个实例中更新Initialize,稍微改变了设计。
另一个想法是使用合理的默认值,这样如果我们忘记设置它,那么至少有一些有用的东西。但在这种情况下,没有有用的默认值。我真的想要一个强调自我来提醒我每次创建控件实例时都需要设置一些东西。
答案 0 :(得分:3)
你无法在设计师层面强制执行,没有“我已经完成设计”触发器。但肯定是在运行时,只是尽早抛出异常:
protected override void OnCreateControl(EventArgs e) {
if (!DesignMode && !mumbleAssigned)
throw new InvalidOperationException("Oops, Mumble property wasn't set");
base.OnCreateControl(e);
}
如果实现OnPaint()方法,可以使它更加微妙。而只需e.Graphics.DrawText一个提醒。在属性设置器中调用Invalidate()。这在设计时有效。
答案 1 :(得分:2)
没有任何尖叫必须像异常一样实施。如果有一个至关重要的属性,我总是确保在运行代码时知道它:
public object ImportantProperty
{
get
{
if (!this.DesignMode && _superImportantProperty == null)
{
throw new Exception("The property ImportantProperty must be set.");
}
}
}
当然,如果您可以使用默认属性值,这可能会有点极端。在可能的情况下,始终选择优雅的行动方案而不是灾难性的行动方案。