【问题标题】: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上测试
【问题讨论】:
标签:
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; }
}