C# c DataChanged事件不会在windows窗体(桌面应用程序)上触发

C# c DataChanged事件不会在windows窗体(桌面应用程序)上触发,c#,winforms,C#,Winforms,我有一个表单,我选择一些复选框,编辑一些文本字段,从组合框中选择等等。然后我单击退出。基于数据已更改的事实??我希望采取行动。问题是我无法完成活动: private void DataChanged(object sender, EventArgs e) { MessageBox.Show("Data is changed", "debug"); isDataSaved = false; } 何时调用此方法,如何使其工作?当表单的字段包含一些数据(例如填充文本框)时,是否应该触

我有一个表单,我选择一些复选框,编辑一些文本字段,从组合框中选择等等。然后我单击退出。基于数据已更改的事实??我希望采取行动。问题是我无法完成活动:

private void DataChanged(object sender, EventArgs e)
{
    MessageBox.Show("Data is changed", "debug");
    isDataSaved = false;
}
何时调用此方法,如何使其工作?当表单的字段包含一些数据(例如填充文本框)时,是否应该触发此操作

我并不真正了解API:

注:我将遵循Mike Murach C第5版第10章的示例

编辑书本中的确切单词:

为事件生成名为DataChanged的事件处理程序 XXXX名称组合框的SelectedIndexChanged事件。然后,电线 将此事件处理程序添加到YYYYY方法标签的TextChanged事件 并将代码添加到此事件处理程序,使其设置isDataSaved 变量为false


当我双击commbo框时,生成的事件处理程序并没有被命名为DataChanged,而是cboNames\u SelectedIndexChanged。。。这是一本书搞砸了还是我的书?附言:没有“数据库”在项目中

就我个人而言,这些天我主要使用数据绑定来获得数据更改的通知

一个数据持有者类,它实现INotifyPropertyChanged。此接口使您能够在属性值更改时收到通知

public class SomeData: INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;

    private void SetProperty<T>(ref T field, T value, [CallerMemberName] string name = "") {
        if (!EqualityComparer<T>.Default.Equals(field, value)) {
            field = value;
            var handler = PropertyChanged;
            if (handler != null) {
              handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }

    private boolean _someBoolean;
    public int SomeBoolean {
        get { return _someBoolean; }
        set { 
            SetProperty(ref _someBoolean, value);
        }
    }

    private string _someString;
    public string SomeString {
        get { return _someString; }
        set { 
            SetProperty(ref _someString, value);
        }
    }

    // etc
}

您的问题是不知道方法DataChanged在何处使用以及如何使用。我有一个建议,就是在属性中使用焦点激活。添加数据更改打印方法激活 祝你好运


@他后来编辑并添加了winforms标签。这就是为什么回答像ASP.NET页面一样。我认为包含DataChanged事件的DataSourceProvider类是WPF类。那么,您如何在WinForms应用程序中使用它?您的底层数据存储是什么?你提到的控件是数据绑定的吗?您可能需要包含更多信息,因为我们无法访问该书进行查找。
public partial class SomeForm: Form {
    private SomeData _data;
    private void LoadData() {
        _data = new SomeData();
        _data.PropertyChanged += Data_PropertyChanged;
    }

    private void SaveData() {
        // TODO: Save data
    }

    private void AddDataBindings() {
        checkbox1.DataBindings.Add("Checked", _data, "SomeBoolean");
        textbox1.DataBindings.Add("Text", _data, "SomeString");
        // add other
    }

    private void Data_PropertyChanged(object sender, PropertyChangedEventArgs e) {
        // Here you can add actions that must be triggered when some data changes.
        if (e.PropertyName == "SomeBoolean") {
            // Do something when some-boolean property changes
        }

        // Set is-changed-boolean to true to 'remember' that something has changed.
        _isChanged = true;

        // Give message
        MessageBox.Show(string.Format("Data changed, property {0}", e.PropertyName));
    }

    private bool _isChanged = false;

    protected void Form_Closed(object sender, EventArgs e) {
        // If data is changed, save it
        if (_isChanged) {
            SaveData();
        }           
    }
}