我有一个表单,我选择了一些checkboxes
,编辑了一些text field
,从combobox
中选择等,然后点击Exit
。基于“数据已被改变??”的事实我希望采取行动。问题是我无法使事件发挥作用:
private void DataChanged(object sender, EventArgs e)
{
MessageBox.Show("Data is changed", "debug");
isDataSaved = false;
}
何时调用此方法,如何使其工作?当表单的字段有一些数据,即filL一个文本框时,这应该被解雇吗?
我真的没有API:DataChanged event
注意:我正在关注Mike Murach C#第5版第10章的例子。
编辑(来自书中的确切词语):
为。生成名为DataChanged的事件处理程序 XXXX名称组合框的SelectedIndexChanged事件。然后,电线 此事件处理程序指向YYYYY方法标签的TextChanged事件 并将代码添加到此事件处理程序,以便设置isDataSaved 变量为假
当我双击commbo框时,生成的事件处理程序不是名为DataChanged而是cboNames_SelectedIndexChanged ...(这是一本书搞砸了还是我的总菜刀?PS:项目中没有..'数据库' )
答案 0 :(得分:0)
就我个人而言,这些天我主要使用数据绑定来获得数据变化的通知。
数据持有者类,实现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();
}
}
}
答案 1 :(得分:0)
您的问题不知道DataChanged使用的方法和方法。我有一个建议,即在属性中使用Focus Activated。添加datachanged打印方法已激活 祝你好运。