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