0

WinFormでオブジェクトイベントを発生させる必要があります。オブジェクトのプロパティが変更されたときに、(UIで)制御状態を変更する必要があります。UIでオブジェクトイベントを発生させるにはどうすればよいですか?

編集:フォームでは、オブジェクトのプロパティにバインドされた2つのドロップダウンがあります。最初のドロップダウンの選択がfalseの場合、2番目のドロップダウンを無効にする必要があります。

4

2 に答える 2

0

オブジェクトのイベントを発生させることはできません。オブジェクトのみがイベントを発生させることができます。サブスクライブできるのはオブジェクトのイベントのみです。なんで?イベントは実際にはハンドラーを追加および削除するためのメソッドのペアであるためです。これは、どこからでも呼び出すことができるデリゲートタイプのプロパティと同じではありません。

したがって、オブジェクトがそのイベントを発生させるようなことを行う必要があります。イベントを直接発生させる方法はありません。


INotifyPropertyChanged使用例は次のとおりです。

// your object
public class Foo : INotifyPropertyChanged
{
    private bool _bar;

    public bool Bar
    {
        get { return _bar; }
        set { 
            if (_bar == value)
                return;

            _bar = value;
            OnPropertyChanged("Bar");
        }
    }

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

そして、コントロールをこのオブジェクトにバインドします。

yourControl.DataBindings.Add("Enabled", foo, "Bar");

プロパティが変更されるとBar、fooオブジェクトがイベントを発生させ、コントロールがそのイベントを処理します。

于 2013-02-26T09:35:35.850 に答える
0

オブジェクトがすでに実装している場合は、クラスINotifyPropertyChanged内で次のことを実行できます。WinForm

yourObject.PropertyChanged += (s, e) =>
    {
        if (e.PropertyName == "Name") {
            //Check the value of the property here, etc...
            button1.Enabled = false;
        }
    };

その例でNameは、は監視するプロパティです。

于 2013-02-26T09:35:50.233 に答える