在UserControl中定义新的Visible属性。设置为false时,控件将从设计器中消失

时间:2014-07-23 05:44:14

标签: winforms visual-studio-2010 visual-studio visual-studio-2012 user-controls

我创建了一个UserControl1:UserControl,我将VisibleNew属性定义为

[Browsable(true)]
public bool VisibleNew
{
    get
    {
        return Visible;
    }
    set
    {
        Visible = value;
    }
}

因此,如果控件放在窗体上,设置Visible = false不会将其隐藏在设计器中。但设置VisibleNew = false会隐藏它!

有什么问题?如何使VisibleNew不在设计时隐藏控件? 在VS2010上测试,VS2012

1 个答案:

答案 0 :(得分:1)

控件有一个 designer ,一个在设计时运行并使控件行为不同的类。 UserControl的现有设计器将拦截对Visible属性的任何赋值,以防止控件在设计时隐藏。问题是,它不知道有关VisibleNew属性的bean,因此无法拦截它。

从技术上讲,您可以创建自己的设计师并截取VisibleNew。然而,直接在您的班级中构建设计时间意识要简单得多。您可以使用DesignMode属性检测您的控件是否在设计时使用。像这样:

    private bool visibleNew = true;

    [Browsable(true), DefaultValue(true)]
    public bool VisibleNew {
        get {
            return visibleNew;
        }
        set {
            visibleNew = value;
            if (!this.DesignMode) base.Visible = visibleNew;
        }
    }

戴上我的通灵调试眼镜,我觉得你根本不想这样做。修改Visible属性非常棘手,它在运行时具有古怪的行为。如果控件实际上对用户可见,它将仅返回 true 。我只能想象你想创建自己的属性来解决这个问题。正确的方法是这样的:

    private bool visibleIntent;

    protected override void SetVisibleCore(bool value) {
        visibleIntent = value;
        base.SetVisibleCore(value);
    }

    [Browsable(false)]
    public bool VisibleIntent {
        get { return visibleIntent;  }
    }