Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保设置UserControl上的属性的好方法?_C#_Winforms_User Controls - Fatal编程技术网

C# 确保设置UserControl上的属性的好方法?

C# 确保设置UserControl上的属性的好方法?,c#,winforms,user-controls,C#,Winforms,User Controls,如果我们的UserControl需要设置某些属性以使其有用,那么确保设置这些属性的最佳方法是什么?即使只是给自己和/或亲密同事的一个提示 我们已经尝试过使用Initialize方法,但这已经让我们陷入困境,因为我们忘记了在一个实例中更新Initialize,只是稍微改变了设计 另一个想法是使用一个合理的默认值,这样如果我们忘记设置它,那么至少有一些有用的东西。但在这种情况下,没有一个有用的默认值。我真的希望self给我一个强烈的提示,提醒我每次创建控件实例时都需要设置一些东西。任何尖叫都不能像异

如果我们的UserControl需要设置某些属性以使其有用,那么确保设置这些属性的最佳方法是什么?即使只是给自己和/或亲密同事的一个提示

我们已经尝试过使用Initialize方法,但这已经让我们陷入困境,因为我们忘记了在一个实例中更新Initialize,只是稍微改变了设计


另一个想法是使用一个合理的默认值,这样如果我们忘记设置它,那么至少有一些有用的东西。但在这种情况下,没有一个有用的默认值。我真的希望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。这在设计时起作用。

对我来说似乎是很好的答案,没有您的跟进。“你还需要别的吗?”汉斯我用了另一种方式,只是想决定是把我的方式当作一个恰当的答案并接受它,还是我的方式太粗鲁了,在这种情况下,我会接受另一种方式。请注意,很久以前我对两个答案都投了赞成票,这两个答案对我来说都是很好的答案,没有你的跟进。“你还需要别的吗?”汉斯我用了另一种方式,只是想决定是把我的方式当作一个恰当的答案并接受它,还是我的方式太粗鲁了,在这种情况下,我会接受另一种方式。请注意,我很久以前对两个答案都投了赞成票