为什么Visual Studio在其他属性的setter中修改后,不会在其属性窗口中刷新某些属性?
以下是一个例子:
public partial class MyControl: UserControl {
public MyControl() { InitializeComponent(); }
private bool myThing=false;
[Category("Behavior")]
public bool Mything {
get { return myThing; }
set {
myThing=value;
Enabled=!Enabled;
Visible=!Visible;
AllowDrop=!AllowDrop;
AutoScroll=!AutoScroll;
AutoSize=!AutoSize;
TabIndex+=2;
}
}
}
将此类设置为类库,将其构建为DLL,然后将此组件放入Visual Studio的工具箱中。 然后在VS中创建一个新的“Windows Forms Application”,并将此组件(MyControl)从工具箱中放入Form1。
现在去点击VS-property-editor中的Mything属性。当它打开和关闭时,您可以看到(在属性编辑器中)它增加TabIndex,并正确打开和关闭AutoSize和AutoScroll
属性,但不启用Enabled,Visible和AllowDrop属性!
这三个在属性编辑器中没有改变!!
为什么?
您可以使用Button而不是UserControl来尝试此操作,并且当Enabled属性关闭时(Mything-setter),您可以看到Button变为灰色,但仅在设计器视图中,在属性编辑器中窗口它仍显示原始值!! 此外,如果您保存应用程序,您可以在Form1.Designer.cs中看到Enabled属性未刷新!!下次加载项目时,它会加载未修改的值! (显示在属性编辑器窗口中)
我尝试过使用RefreshProperties
属性,我尝试过实施INotifyPropertyChanged
,但没有运气! :(
那么,为什么Visual Studio会在其属性编辑器中刷新一些属性而不刷新其他属性? 并且(在setter代码中)我如何将FORCE Visual Studio属性窗口改为REFRESH?
有什么想法吗?