簡體   English   中英

防止更改列表框選擇

[英]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 我將查看您的ShowStudentShowClass方法,看看它們是否還使用了名為y的變量, 或者這些方法是否正在更新listClasses.SelectedIndex ,因為它們很可能有權更新此值,因此有機會更新y ,因為ylistClasses.SelectedIndex

通常,優良作法是將這些變量保留在您的方法本地,以免在方法范圍之外對該變量進行任何不必要的更改。 如果需要在另一個過程中使用此變量,只需將其作為參數傳遞給另一個方法或函數。

簡而言之,如果將變量y的聲明移到方法內部,則可以在代碼的其他位置更新y (通過listClasses.SelectedIndex的更新或直接更改y )來解決問題。 如果不是,則可能是更復雜的控制問題。 但是,我對此表示懷疑。

但是 ,只有您調用了兩個可以在此重新分配之前更改此變量的方法之后 ,才將所選索引重新分配為y ,這一事實使我相信這可能是一個范圍相關的問題,即提供了y不必要的變量重分配。

鏈接: 極客極客:C#可變范圍

希望您的解決就是這么簡單。 最好的祝願。

PS-還要用比y更好的名稱,因為它會在代碼的其他位置像拇指一樣伸出來。 y模糊且不具描述性。 將其命名為int CurrentIndex

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM