他のプロパティのセッターで変更されたときに、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 Forms Application' を作成し、このコンポーネント (MyControl) をツールボックスから Form1 に配置します。
次に、VS-property-editor の Mything プロパティをクリックして変更します。オンとオフを切り替えると、(プロパティ エディターで) TabIndex が増加し、AutoSize とAutoScroll
プロパティを正しくオン/オフすることがわかりますが、Enabled、Visible、AllowDrop プロパティは変わりません! この 3 つは、プロパティ エディタでは変更されません!! なぜ?
UserControl の代わりに Button を使用してこれを試すこともできます。また、Enabled プロパティが (Mything-setter によって) オフにされると、Button が灰色に変化するのを確認できますが、デザイナー ビューでのみ、プロパティ エディター ウィンドウでまだ表示されます。本来の価値を発揮!! さらに、アプリケーションを保存すると、Form1.Designer.cs で Enabled プロパティが更新されていないことがわかります!! 次にプロジェクトをロードすると、変更されていない値がロードされます! (これはプロパティ エディタ ウィンドウに表示されていました)
RefreshProperties
属性を使用してみました、実装しようとしましINotifyPropertyChanged
たが、うまくいきません! :(
では、Visual Studio がプロパティ エディターで一部のプロパティを更新し、他のプロパティを更新しないのはなぜでしょうか? そして(セッターコードで)Visual Studioのプロパティウィンドウを強制的にリフレッシュするにはどうすればよいですか?
何か案は?