【问题标题】:Defining new Visible property in UserControl. When set to false control disappears from designer在 UserControl 中定义新的 Visible 属性。当设置为 false 控件从设计器中消失
【发布时间】:2014-09-14 04:18:51
【问题描述】:

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

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

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

怎么了?如何使 VisibleNew 在设计时不隐藏控件? 在VS2010、VS2012上测试

【问题讨论】:

  • IDE 与这个问题有什么关系?

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


【解决方案1】:

控件有一个设计器,这是一个在设计时运行并使控件行为不同的类。 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;  }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2010-10-25
    • 2011-03-23
    相关资源
    最近更新 更多