我有一個列表框中的一些項目。有兩個按鈕可添加和刪除列表框項目。關閉表單時,如果對列表框進行了任何更改,我需要一個確認消息框。所以基本上,表單需要知道列表框中的項目是否已更改。這將是正確的列表框事件來設置更改的標誌?右列表框事件來處理listbox中的更改? (C#)
注意:當然,我可以通過添加按鈕和刪除按鈕單擊處理此操作,但這不是正確的方法。不是嗎?所以沒有骯髒的技巧,但正確的做法?
我有一個列表框中的一些項目。有兩個按鈕可添加和刪除列表框項目。關閉表單時,如果對列表框進行了任何更改,我需要一個確認消息框。所以基本上,表單需要知道列表框中的項目是否已更改。這將是正確的列表框事件來設置更改的標誌?右列表框事件來處理listbox中的更改? (C#)
注意:當然,我可以通過添加按鈕和刪除按鈕單擊處理此操作,但這不是正確的方法。不是嗎?所以沒有骯髒的技巧,但正確的做法?
如果只是直接使用ListBox,否則沒有事件會告訴您列表已更改。
最好讓ListBox使用像BindingList這樣支持ListChanged事件的數據源。
private BindingList<string> myList = new BindingList<string>();
private bool isDirty;
public Form1()
{
InitializeComponent();
myList.Add("aaa");
myList.Add("bbb");
myList.Add("ccc");
myList.ListChanged += new ListChangedEventHandler(myList_ListChanged);
listBox1.DataSource = myList;
}
public void myList_ListChanged(object sender, ListChangedEventArgs e)
{
isDirty = true;
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("IsDirty = " + isDirty.ToString());
myList.Add("ddd");
MessageBox.Show("IsDirty = " + isDirty.ToString());
}
我想你應該設置被調用的方法中的「髒」標誌來實際執行項目的添加和刪除。這樣,如果您決定添加用於與列表框(上下文菜單,鍵盤快捷方式等)交互的其他方法,則您的邏輯全部在一個位置,並且可以重新使用。
所以,你的add方法會是這個樣子:
public void Add(MyListboxItem itemToAdd)
{
// Adding code here
// Set the boolean flag to true
this.IsDirty = true;
}
這是一個有點天真的方法,不過,因爲現在增加一個項目,然後刪除它導致一個提示,即使列表中有不實際上從原來的狀態改變了。如果列表的大小不是太大,另一個選擇是在第一次加載時製作備份數據的副本,然後將最終數據與該副本進行比較。如果沒有差異,則不必提示。
謝謝,這是一個解決方法,但比明顯的選擇更多的工作。 – nawfal