[英]c# DataChanged event does trigger on a windows form (Desktop Application)
我有一個表單,我選擇了一些checkboxes
,編輯了一些text field
,從combobox
選擇了一個,等等,然后單擊“ Exit
。 基於“數據已更改?”的事實 我希望采取行動。 問題是我無法使事件正常進行:
private void DataChanged(object sender, EventArgs e)
{
MessageBox.Show("Data is changed", "debug");
isDataSaved = false;
}
什么時候調用此方法,如何使它起作用? 當表單的字段中包含一些數據(即filL一個文本框)時,是否應該觸發該事件?
我沒有真正得到API: DataChanged事件
注意:我正在遵循Mike Murach C#第5版第10章的示例。
編輯(書中的確切字詞):
為XXXX Name組合框的SelectedIndexChanged事件生成一個名為DataChanged的事件處理程序。 然后,將此事件處理程序連接到YYYYY方法標簽的TextChanged事件,並將代碼添加到此事件處理程序,以便將isDataSaved變量設置為false
當我雙擊組合框上生成的事件處理程序時,它的名稱不是DataChanged,而是cboNames_SelectedIndexChanged ...(這是一本書搞砸了,還是我完全不懂?PS:項目中沒有..'database')
我個人最近主要使用數據綁定來獲取有關數據更改的通知。
數據持有者類,實現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在哪里使用以及如何使用。 我建議您在屬性中使用“聚焦激活”。添加數據更改的打印方法“激活好運”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.