当窗体发生任何变化时,Visual Studio就会更改控件属性
本文关键字:Studio 属性 控件 Visual 窗体 任何 变化 | 更新日期: 2023-09-27 18:05:48
我在一个winforms应用程序上工作。我有一个名为"MainForm"的表单,其中包含用户控制。在用户控件中有一个复选框,在某些情况下应该是隐藏的-这就是为什么我为它做了一个属性。问题是,每当我打开mainform并对其进行任何更改时,设计器都会将该属性更改为false,因此控件中的复选框不可见。
有什么方法可以防止这种行为吗?(我使用VS2012)
更新:在控件后面的代码中,我有一个属性
public bool IsWebOmmitVisable
{
get { return ommitCheckBox.Visible; }
set { ommitCheckBox.Visible = value; }
}
在控件的构造函数中,我将其设置为true:
public myControl()
{
InitializeComponent();
IsWebOmmitVisable = true;
...
然而,这看起来并不重要。
然后我将这个控件添加到MainForm。该属性在控件的属性中可见。然而,每当我修改MainForm中的任何元素时,该属性都会被设置为false。
使用DesignerSerializationVisibilityAttribute将阻止该属性在设计器中被序列化。
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool IsWebOmmitVisable
{
get { return ommitCheckBox.Visible; }
set { ommitCheckBox.Visible = value; }
}
从链接:使用DesignerSerializationVisibilityAttribute,您可以指示属性的值是Visible,并且应该在初始化代码中持久化,还是Hidden,并且不应该在初始化代码中持久化,或者由Content组成,应该为每个公共的初始化代码生成,而不是分配给属性的对象的隐藏属性。不具有DesignerSerializationVisibilityAttribute的成员将被视为具有DesignerSerializationVisibilityAttribute值为Visible的成员。标记为可见的属性值将被序列化,如果可能的话,由该类型的序列化器序列化。要为特定类型或属性指定自定义序列化,请使用DesignerSerializerAttribute。
simple form image
和form .cs
中的代码private void Form1_Load(object sender, EventArgs e)
{
textBox1.Visible = false;
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Visible = !textBox1.Visible;
}
它工作得很完美。(按钮切换文本框的Visible
属性。)我不确定你在哪一步出错了。
Form1_Load
是在设计器中双击表单标题自动生成的。
button1_Click
是通过双击设计器中的button1自动生成的
在属性窗口中选择主窗体的类,然后单击事件选项卡(闪电图标),然后双击加载事件,这将在窗体中添加一个加载事件,在这里您可以根据需要为复选框控件
设置可见为false或true。 private void MainForm_Load(object sender, EventArgs e)
{
mycheckbox.Visible = false;
}