C# 确保设置UserControl上的属性的好方法?
如果我们的UserControl需要设置某些属性以使其有用,那么确保设置这些属性的最佳方法是什么?即使只是给自己和/或亲密同事的一个提示 我们已经尝试过使用Initialize方法,但这已经让我们陷入困境,因为我们忘记了在一个实例中更新Initialize,只是稍微改变了设计C# 确保设置UserControl上的属性的好方法?,c#,winforms,user-controls,C#,Winforms,User Controls,如果我们的UserControl需要设置某些属性以使其有用,那么确保设置这些属性的最佳方法是什么?即使只是给自己和/或亲密同事的一个提示 我们已经尝试过使用Initialize方法,但这已经让我们陷入困境,因为我们忘记了在一个实例中更新Initialize,只是稍微改变了设计 另一个想法是使用一个合理的默认值,这样如果我们忘记设置它,那么至少有一些有用的东西。但在这种情况下,没有一个有用的默认值。我真的希望self给我一个强烈的提示,提醒我每次创建控件实例时都需要设置一些东西。任何尖叫都不能像异
另一个想法是使用一个合理的默认值,这样如果我们忘记设置它,那么至少有一些有用的东西。但在这种情况下,没有一个有用的默认值。我真的希望self给我一个强烈的提示,提醒我每次创建控件实例时都需要设置一些东西。任何尖叫都不能像异常一样实现。如果有一个属性非常重要,我总是确保在运行代码时了解它:
public object ImportantProperty
{
get
{
if (!this.DesignMode && _superImportantProperty == null)
{
throw new Exception("The property ImportantProperty must be set.");
}
}
}
当然,如果可以使用默认属性值,这可能有点极端。在可能的情况下,总是选择一个优雅的行动方案,而不是灾难性的行动方案。没有什么比异常情况更需要实施的了。如果有一个属性非常重要,我总是确保在运行代码时了解它:
public object ImportantProperty
{
get
{
if (!this.DesignMode && _superImportantProperty == null)
{
throw new Exception("The property ImportantProperty must be set.");
}
}
}
当然,如果可以使用默认属性值,这可能有点极端。在可能的情况下,总是选择一个优雅的行动方案,而不是灾难性的行动方案。在设计师层面上没有什么可以强制执行的,没有我已经完成的触发器设计。但当然,在运行时,只要尽早抛出一个异常:
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。这在设计时起作用。在设计器级别上没有什么可以强制执行的,没有“我已完成设计”触发器。但当然,在运行时,只要尽早抛出一个异常:
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。这在设计时起作用。对我来说似乎是很好的答案,没有您的跟进。“你还需要别的吗?”汉斯我用了另一种方式,只是想决定是把我的方式当作一个恰当的答案并接受它,还是我的方式太粗鲁了,在这种情况下,我会接受另一种方式。请注意,很久以前我对两个答案都投了赞成票,这两个答案对我来说都是很好的答案,没有你的跟进。“你还需要别的吗?”汉斯我用了另一种方式,只是想决定是把我的方式当作一个恰当的答案并接受它,还是我的方式太粗鲁了,在这种情况下,我会接受另一种方式。请注意,我很久以前对两个答案都投了赞成票