我需要保持在列表框軌道所選擇的項目的根據當前所選的值來更新/禁用其它控制/的SelectedIndexChanged不點火。列表框SelectedValueChanged當數據源改變
這是重現該問題的代碼:
public partial class Form1 : Form
{
private readonly BindingList<string> List = new BindingList<string>();
public Form1()
{
InitializeComponent();
listBox1.DataSource = List;
listBox1.SelectedValueChanged += (s, e) => System.Diagnostics.Debug.WriteLine("VALUE");
listBox1.SelectedIndexChanged += (s, e) => System.Diagnostics.Debug.WriteLine("INDEX");
addButton.Click += (s, e) => List.Add("Item " + (List.Count + 1));
removeButton.Click += (s, e) => List.RemoveAt(List.Count - 1);
logSelectionButton.Click += (s, e) =>
{
System.Diagnostics.Debug.WriteLine("Selected Index: " + listBox1.SelectedIndex);
System.Diagnostics.Debug.WriteLine("Selected Value: " + listBox1.SelectedValue);
};
}
}
我的窗體有一個列表框listBox1
和三個按鈕:addButton
,removeButton
和logSelectionButton
。
如果按addButton
(從一個空列表),然後removeButton
最後addButton
再次,既不SelectedValueChanged
也不SelectedIndexChanged
將火在最後addButton
機,即使你之前和最後addButton
按後按logSelectionButton
,你就會發現兩者SelectedIndex
和SelectedValue
的值已經從-1變爲0,並從null
分別爲‘項目1’,並認爲‘項目1’看起來在列表框中選擇。
這將導致我需要根據所選擇的項目更新任何其他控件保持禁用,直到用戶手動選擇在列表框中的項目,即使第一個項目已經被選中。
我想不出什麼解決辦法的。也許還訂閱我的BindingList的ListChanged
事件看列表是否爲空,但我不知道,如果在列表框中的項目會前或我的事件處理程序火災,這將導致其他問題後進行更新。
這似乎並沒有工作。顯然'CurrentChanged'在選擇實際改變之前觸發,我需要的是跟蹤當前選擇的項目。我找到了另一種解決方案(請參閱我自己的回覆) – Juan
如你所願。如果通過綁定管理器的「當前」屬性提供相同的控制選擇,並且是正確的,我不明白爲什麼你會關心。所有自動主 - 細節綁定和導航器都使用該方法,而不是對特定的控件事件/屬性作出反應。 –
不知道你可以從'Current'中獲得選定的值。好的方法。 – Juan