只要表单发生任何更改,Visual Studio就会更改控件属性

时间:2016-09-06 14:55:51

标签: c# winforms visual-studio-2012

我正在开发一个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。

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

3 个答案:

答案 0 :(得分:1)

使用DesignerSerializationVisibilityAttribute将阻止在设计器中序列化属性。

   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public bool IsWebOmmitVisable
    {
        get { return ommitCheckBox.Visible; }
        set { ommitCheckBox.Visible = value; }
    }

来自链接:

  

使用DesignerSerializationVisibilityAttribute,您可以指示属性的值是否为Visible,并且应该保留在初始化代码中,Hidden,并且不应该在初始化代码中保留,或者由Content组成,Content应该具有为其生成的初始化代码每个公共,而不是分配给该属性的对象的隐藏属性。   没有DesignerSerializationVisibilityAttribute的成员将被视为具有值为Visible的DesignerSerializationVisibilityAttribute。标记为Visible的属性的值将尽可能由类型的序列化程序序列化。要为特定类型或属性指定自定义序列化,请使用DesignerSerializerAttribute。

答案 1 :(得分:0)

在属性窗口中选择主窗体的类,然后单击事件选项卡(闪电图标),然后在加载事件中双击,这将在窗体中添加一个加载事件,在这里您可以将visible设置为false或如您所希望的那样使用复选框控件

    private void MainForm_Load(object sender, EventArgs e)
    {
        mycheckbox.Visible = false;
    }

答案 2 :(得分:0)

simple form image

和Form1.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,自动生成button1_Click