簡體   English   中英

如何將 go 返回到之前在 combobox 中選擇的條目?

[英]How to go back to previously selected entry in a combobox?

在我的應用程序中有這樣的要求:

在一個表單中有一個組合框和 4 個文本框。 組合框始終包含值范圍 1...10。 根據在組合框中選擇的值,我需要從數據庫中讀取與所選值對應的 4 個數據項,並將這些值顯示在 4 個文本框中。 因此對於組合框中的每個值,數據庫中有 4 個值。

此外,用戶可以通過編輯 4 個文本框中的值來更改這些值。

例如,假設組合框中當前選擇的值為 1。因此從數據庫中讀取對應於記錄 1 的數據並顯示在 4 個文本框中。 如果用戶不編輯文本框中的任何值並選擇條目 2(或除 1 以外的任何其他值),則從數據庫中獲取與新選擇的值(即 2)對應的數據並顯示在 4 個文本框中。 但是,如果用戶通過在四個可用文本框中的任何一個中鍵入來編輯任何值,那么在切換到新選擇的條目(即 2)之前,應將與記錄 1 對應的那些新值保存到數據庫中。

為此,我在組合框的“SelectedIndexChanged 事件處理程序”中編寫了一些代碼。 我在那里檢查用戶是否更改了任何值。 如果是,我會提示用戶保存數據。 保存數據后,組合框會顯示用戶新選擇的值即2(4個文本框會顯示記錄2對應的數據)。 所有上述功能都可以正常工作。 但是還有一個額外的要求“如果對數據庫的保存操作失敗,那么組合框中的初始值應該與用戶編輯的數據(在文本框中)一起顯示,這意味着如果數據庫寫入失敗我必須顯示當前選擇的值 1,而不切換到新選擇的值 2"。

在 SelectedIndexChanged 處理程序中,我嘗試編寫以下代碼。

If (DatabaseWriteFails)
{
    ComboBox->SelectedIndex = previous_value; (previous_value is 1 in our example)
}

但是上面的代碼不起作用(我想因為我們試圖從 SelectedIndexChanged 處理程序本身更改選定的值)。 當我們進入 SelectedIndexChanged 處理程序時,我可以看到 ComboBox->SelectedValue 已經更改為新選擇的值,即 2。

問題是“一旦我們進入 SelectedIndexChanged 處理程序,我們如何才能 go 回到上一個條目”? 任何幫助表示贊賞。 謝謝你。

首先,如果您更改事件中的 ComboBox 值,它將再次觸發該事件,因此不要使用 SelectedIndexChanged,而是使用 SelectionChangeCommitted,它僅在用戶從 UI 更改所選項目時發生,而不是以編程方式發生。

其次,您應該使用 SelectedItem 或 SelectedIndex 更改下拉列表,根據我的經驗,SelectedValue 綁定不會更新 ComboBox。

如評論中所述,我對您的建議是使用綁定甚至ReactiveUI

暫無
暫無

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

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