从WinForm调用对象事件

时间:2013-02-26 09:32:37

标签: c# winforms events

我需要在WinForm中引发对象事件。 当对象属性发生更改时,需要更改控件状态(在UI中)。如何在UI中引发对象事件?

编辑:在表单上我有2个下拉列表绑定到对象属性。当第一个选择为false时,我需要禁用第二次下拉。

2 个答案:

答案 0 :(得分: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对象将引发事件,您的控件将处理该事件。

答案 1 :(得分:0)

如果您的对象已经实现INotifyPropertyChanged,则可以在WinForm类中执行以下操作:

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

在该示例中,Name是您要监控的属性。