1

为什么 Visual Studio 在其属性窗口中的某些属性在其他属性的设置器中被修改时不刷新?

这是一个例子:

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 窗体应用程序”,并将此组件(MyControl)从工具箱中放入 Form1。

现在通过单击更改 VS-property-editor 中的 Mything 属性。当它打开和关闭时,您可以看到(在属性编辑器中)它增加了 TabIndex,并AutoScroll正确打开和关闭了 AutoSize 和属性,但不是 Enabled、Visible 和 AllowDrop 属性!这三个在属性编辑器中没有变化!!为什么?

您也可以使用 Button 而不是 UserControl 来尝试此操作,并且当 Enabled 属性关闭(通过 Mything-setter)时,您可以看到 Button 变为灰色,但仅在设计器视图中,在属性编辑器窗口中它仍然显示原值!!此外,如果您保存应用程序,您可以在 Form1.Designer.cs 中看到 Enabled 属性未刷新!下次加载项目时,它会加载未修改的值!(显示在属性编辑器窗口中)

我试过使用RefreshPropertiesAttribute,我试过实现INotifyPropertyChanged,但没有运气!:(

那么,为什么 Visual Studio 会在其属性编辑器中刷新某些属性而不会刷新其他属性呢?并且(在设置器代码中)我如何强制 Visual Studio 属性窗口刷新?

有任何想法吗?

4

0 回答 0