为什么Visual Studio在其他属性的setter中修改后,不会在其属性窗口中刷新某些属性?

时间:2012-12-20 09:35:36

标签: c# .net visual-studio properties

为什么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?

有什么想法吗?

0 个答案:

没有答案