我通常會弄清楚事情的真相,但是這讓我有點心不在焉。使用selectedvaluechanged的C#Listboxes
我有一個窗體和提交按鈕列表框的數組。用戶可以從任何列表框中選擇項目,然後單擊提交按鈕以選擇確認項目,但是需要發生的是如果他們從列表框1中選擇某項,然後改變他們的想法並從列表框2中選擇某項,列表框中選擇的項目1應該被取消選擇。
我可以將它編碼到事件處理程序,但問題是一旦我在另一個列表框中以編程方式更改值,它會觸發另一個事件。我似乎無法按照自己的方式走出困境。
任何想法會很好,否則我想我只需要把多個提交按鈕。
編輯:
我想通了,我覺得到底是一個相當明顯的和簡單的解決方案。我利用重點屬性來區分用戶或程序是否正在進行更改。適用於鼠標和鍵盤選擇。
感謝您的建議...
for (int i = 0; i < treatments.Length; i = i + 1)
{
this.Controls.Add(ListBoxes[i]);
this.Controls.Add(Labels[i]);
this.Controls.Add(Spinners[i]);
Labels[i].Top = vPosition - 20;
Labels[i].Left = hPosition;
Labels[i].Width = 600;
ListBoxes[i].Left = hPosition;
ListBoxes[i].Top = vPosition;
ListBoxes[i].Width = 600;
Spinners[i].Top = vPosition + ListBoxes[i].Height;
Spinners[i].Left = hPosition + ListBoxes[i].Width - 60;
Spinners[i].Width = 40;
for (int d = 25; d > 0; d = d - 1) { Spinners[i].Items.Add((d).ToString()); }
Spinners[i].SelectedIndex = 24;
//EVENT HANDLER CODE that is executed if any selectetindexchange in any LIstbox in array
ListBoxes[i].SelectedIndexChanged += (sender, e) =>
{
for (int s = 0; s < i; s = s + 1)
{
//FIND WHICH LBs[s] IS THE SENDING LISTBOX
if (ListBoxes[s] == sender && ListBoxes[s].Focused == true)
{
string msg = "sender is ListBox " + s.ToString() + "\nFocus is" + ListBoxes[s].Focused.ToString();
// MessageBox.Show(msg);
}
else if(ListBoxes[s].Focused==false)
{
ListBoxes[s].SelectedIndex = -1;
}
}
}; //end of event handler
}
是一個WinForms,Web表單或MVC項目? – hardkoded
你總是可以使用一個標誌。 –
這個問題是類似的,並且答案可能適用於一般策略:[在C#中修改combobox SelectedIndex而不觸發事件](https://stackoverflow.com/questions/3356518/modifying-combobox-selectedindex-without-觸發事件中的c-sharp) – hatchet