【问题标题】:Making the Visual Studio designer ignore a public property使 Visual Studio 设计器忽略公共属性
【发布时间】:2011-12-08 15:01:29
【问题描述】:

我有一个带有公共属性的 UserControl,它使用以下属性:

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

我已尝试删除所有者表单,在 Visual Studio 2010 中重新创建一个新表单,然后将此 UserControl 添加到表单中。它不断在 Designer 文件中添加如下一行:

this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty")));

这会使我的应用程序崩溃,因为此属性并非旨在通过序列化创建。

【问题讨论】:

    标签: c# visual-studio serialization designer browsable


    【解决方案1】:

    使用[DesignerSerializationVisibilityAttribute ( Visibility = Hidden )]

    MSDN Article

    【讨论】:

      【解决方案2】:

      我没有找到真正的解决方案,而是找到了解决方法......

      我必须进入 Form.resx 文件并找到它正在反序列化到我的公共属性中的数据/值键对。我手动删除了 XML 对的内容,然后我就可以运行应用程序了。

      这使我的应用程序可以毫无错误地构建和运行。我尝试的所有其他方法(包括删除我的 UserControl 的容器表单并反复重新创建它)都不起作用。

      【讨论】:

        【解决方案3】:

        尝试使用带有属性访问器方法的私有字段以及 [field: NonSerialized] 属性:

        [field: NonSerialized]
        private MyType _MyProperty;
        
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public MyType MyProperty
        {
            get
            {
                return _MyProperty;
            }
            set
            {
                _MyProperty = value;
            }
        }
        

        【讨论】:

          【解决方案4】:

          在设计时将属性设为只读会阻止它被序列化到 resx 文件中。奇怪的是,如果 MyType 恰好是一个集合,则设计器会忽略只读,即使该属性没有写入 resx,您仍然可以在设计时设置该属性,因此最好使该属性也不可浏览。

          [ReadOnly(true)]
          [Browsable(false)]
          public MyType MyProperty
          {
              get { return _MyProperty; }
              set { _MyProperty = value; }
          }
          

          【讨论】:

          • 我想分享一位同事在查看 WinForm 设计器导致 Visual Studio 崩溃时推荐此解决方案。使用这些属性设置所有自定义公共属性,这将防止设计器导致 VS 崩溃。
          • 我希望这个属性存在于紧凑的框架中。 :(
          • 我必须在 VS 2013 (VB) 中使用完全限定名称:
          猜你喜欢
          • 1970-01-01
          • 2015-06-02
          • 1970-01-01
          • 2011-08-29
          • 2011-11-12
          • 1970-01-01
          • 2013-05-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多