【问题标题】:Visual Studio changes control property whenever there any changes in form每当表单发生任何更改时,Visual Studio 都会更改控件属性
【发布时间】:2016-09-06 14:55:50
【问题描述】:

我正在开发一个 winforms 应用程序。我有一个名为“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

【问题讨论】:

  • 你如何设置可见为假?需要在VS非自动生成的部分设置
  • 分享该属性的代码。
  • 目前这个问题没有足够的信息来回答没有您的财产的代码。如果我猜一下,您需要使用属性 (msdn.microsoft.com/en-us/library/…) 使其默认为 true
  • 您共享的代码不会重现问题。发布Minimal, Complete, and Verifiable example 重现问题。
  • 顺便说一句,请记住它是“可见”和“省略”(如果您要跳过某些内容)。

标签: c# winforms visual-studio-2012


【解决方案1】:

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

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

来自链接:

使用 DesignerSerializationVisibilityAttribute,您可以指示属性的值是 Visible,应该在初始化代码中持久化,Hidden,不应该在初始化代码中持久化,还是由 Content 组成,它应该生成初始化代码每个公共的、不隐藏的属性分配给该属性的对象。 没有 DesignerSerializationVisibilityAttribute 的成员将被视为具有值为 Visible 的 DesignerSerializationVisibilityAttribute。 标记为 Visible 的属性的值将在可能的情况下由该类型的序列化程序序列化.要为特定类型或属性指定自定义序列化,请使用 DesignerSerializerAttribute。

【讨论】:

    【解决方案2】:

    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_Click 是通过双击设计器中的 button1 自动生成的。

    【讨论】:

      【解决方案3】:

      在属性窗口中选择主窗体的类,然后点击事件选项卡(闪电图标)然后双击加载事件,这将在窗体中添加一个加载事件,这里你可以设置可见为false或如你所愿为复选框控件为真

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

      【讨论】:

        猜你喜欢
        • 2018-09-05
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多