当窗体发生任何变化时,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。

https://i.stack.imgur.com/0fSvQ.jpg

当窗体发生任何变化时,Visual Studio就会更改控件属性

使用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;
    }