我创建了一个UserControl1:UserControl,我将VisibleNew属性定义为
[Browsable(true)]
public bool VisibleNew
{
get
{
return Visible;
}
set
{
Visible = value;
}
}
因此,如果控件放在窗体上,设置Visible = false不会将其隐藏在设计器中。但设置VisibleNew = false会隐藏它!
有什么问题?如何使VisibleNew不在设计时隐藏控件? 在VS2010上测试,VS2012
答案 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; }
}