[英]Prevent Listbox selection from changing
我對C#和一般的編碼非常陌生。 我對我的小項目有疑問。 我有多個連接到SQL數據庫的列表框。 在列表框下,我有文本框可將新值輸入數據庫。
我遇到的問題是,每當我在文本框中輸入某些內容時(我做到了,按回車鍵都將運行Keydown事件以添加行),因此列表框中的選擇會更改。 這很煩人,因為自從我加入多個數據庫以來,選擇的內容很重要,而選擇內容決定了輸入的位置。
所以我的問題是,在WPF或C#中是否有一種方法可以防止未選中的項目被取消選中? 我已經搜索了一段時間,但是除了我所掌握的很少的知識之外,除了解釋之外我什么也找不到。
感謝您的答復。 我查看了人們發布的鏈接,但無法弄清楚它們如何適用於我的確切問題。 我一直試圖將SelectedIndex保存在一個變量中,然后再將SelectedIndex設置回該變量,但是我一定在某個地方犯了錯誤。
int y;
private void TxbSchüler_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
y = listClasses.SelectedIndex; // Here
try
{
string query = "insert into Schüler values (@Name, @KlassenId)";
SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
sqlConnection.Open();
sqlCommand.Parameters.AddWithValue("@Name", txbSchüler.Text.ToString());
sqlCommand.Parameters.AddWithValue("@KlassenId", listClasses.SelectedValue);
sqlCommand.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
sqlConnection.Close();
ShowStudent();
ShowClass();
}
}
listClasses.SelectedIndex = y; //here
}
在添加元素之前,將所選索引存儲在變量中,並在添加項目后將所選索引設置回該變量
因此,對於我來說很難不看剩下的代碼,而是在TxbSchüler_KeyDown
方法之外聲明y
。 由於這不在您的方法范圍之內,因此這意味着您的類中的其他方法將有權訪問此變量,並且能夠在方法完成執行之前更新其值(這可能是您的問題)。
給定您的代碼,很有可能在TxbSchüler_KeyDown
方法之外更新了y
。 我將查看您的ShowStudent
和ShowClass
方法,看看它們是否還使用了名為y
的變量, 或者這些方法是否正在更新listClasses.SelectedIndex
,因為它們很可能有權更新此值,因此有機會更新y
,因為y
與listClasses.SelectedIndex
。
通常,優良作法是將這些變量保留在您的方法本地,以免在方法范圍之外對該變量進行任何不必要的更改。 如果需要在另一個過程中使用此變量,只需將其作為參數傳遞給另一個方法或函數。
簡而言之,如果將變量y
的聲明移到方法內部,則可以在代碼的其他位置更新y
(通過listClasses.SelectedIndex
的更新或直接更改y
)來解決問題。 如果不是,則可能是更復雜的控制問題。 但是,我對此表示懷疑。
但是 ,只有在您調用了兩個可以在此重新分配之前更改此變量的方法之后 ,才將所選索引重新分配為y
,這一事實使我相信這可能是一個范圍相關的問題,即提供了y
不必要的變量重分配。
鏈接: 極客極客:C#可變范圍
希望您的解決就是這么簡單。 最好的祝願。
PS-還要用比y
更好的名稱,因為它會在代碼的其他位置像拇指一樣伸出來。 y
模糊且不具描述性。 將其命名為int CurrentIndex
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.