C# 在winforms designer中禁用属性设置

C# 在winforms designer中禁用属性设置,c#,winforms,visual-studio-2008,designer,C#,Winforms,Visual Studio 2008,Designer,我在我的项目中使用-它是定制的、开源的TabControl,支持designer。在解决了它的一些问题之后,我偶然发现了一个我不知道如何解决的问题 当我运行我的应用程序时,YATabControl会选择我在designer中选择的同一个选项卡-这不是我想要的(我宁愿从第一个选项卡开始),并且在应用程序运行时,我不能在选项卡之间移动,因为它会在每次更改选项卡时尝试保存属性“SelectedIndex” 它在designers~onclick上设置,使用: RaiseComponentChangin

我在我的项目中使用-它是定制的、开源的TabControl,支持designer。在解决了它的一些问题之后,我偶然发现了一个我不知道如何解决的问题

当我运行我的应用程序时,YATabControl会选择我在designer中选择的同一个选项卡-这不是我想要的(我宁愿从第一个选项卡开始),并且在应用程序运行时,我不能在选项卡之间移动,因为它会在每次更改选项卡时尝试保存属性“SelectedIndex”

它在designers~onclick上设置,使用:

RaiseComponentChanging( TypeDescriptor.GetProperties( Control )[ "SelectedIndex" ] );  
RaiseComponentChanged( TypeDescriptor.GetProperties( Control )[ "SelectedIndex" ], oi, i );(old index, index).

我在想-有没有办法禁止designer设置属性的运行时值

我查看了源代码(没有下载),但看起来您必须告诉
SelectedIndex
属性不要序列化自身:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public virtual int SelectedIndex {
  get {
    return yaSelectedIndex;
  }
  set {...}
}

[Browseable(false)]
是一种解决方法:)

不是一种修复方法,但作为一种解决方法,您不能在构造函数中偶然选择所选索引吗?您可以检查设计模式:您在构造函数中的何处设置它?确保在InitialiseComponents()之后设置它;在Load事件中呢?听起来SelectedIndex的值正在序列化。将控件放到窗体上,然后查看窗体的Designer.cs文件。请确保没有设置SelectedIndex属性。@Ryan:当我在窗体的构造函数中设置所选索引时,它工作得很好,这些选项卡控件就位于该构造函数中。它总是显示我需要它的第一个选项卡。仍然-每次我查看选项卡时,它都会更改我的designer&resx文件。这个答案唯一缺少的是:在每个RaiseComponent上更改/更改它都会重写设计器文件,因此最好删除那些只编辑不适用的属性(未序列化的属性)的文件-这样,当应用程序处于调试状态时,您就不必担心在设计器中选择不同的选项卡。这就是
[可浏览(false)]
:“指定是否应在属性窗口中显示属性或事件。”