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

本文关键字:应用程序 桌面 窗体 事件 windows c#DataChanged | 更新日期: 2023-09-27 18:28:30

我有一个表单,我选择一些checkboxes,编辑一些text field,从combobox中选择等等,然后单击Exit。基于"数据已更改??"这一事实,我希望执行操作。问题是我无法完成活动:

private void DataChanged(object sender, EventArgs e)
{
    MessageBox.Show("Data is changed", "debug");
    isDataSaved = false;
}

这个方法什么时候被调用,我如何使它工作?当表单的字段有一些数据时,即过滤文本框时,这会被触发吗?

我真的不知道API:DataChanged事件

注:我下面是Mike Murach C#第5版第10章的例子。

编辑(书中的确切单词):

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

当我双击生成的事件处理程序的命令框时,它的名称不是DataChanged,而是cboNames_SelectedIndexChanged。。。(这是一本书搞砸了还是我完全没有?附言:项目中没有.."数据库")

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

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

一个数据持有者类,用于实现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
}

现在我们的表单,它使用数据类及其INotifyPropertyChanged实现来在数据发生更改时得到通知。

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();
        }           
    }
}

您的问题不知道DataChanged方法在哪里使用以及如何使用。我给你一个建议,那就是在属性中使用Focus Activated。添加数据更改的打印方法已激活祝你好运

您必须使属性像一样