2015-10-30 44 views
0

我做了一個包含字符串(comboBox.Items.Add(字符串))的組合框和一次每隔幾秒我想刷新它(它是一個客戶端列表,因此有些可能連接/ disconnect)。我遇到的問題是,當我刷新列表時,它也將選定的項目更改爲空,因此如果我試圖與最後選擇的客戶端進行通信會導致問題(這意味着我必須在選擇之後重新選擇它每一個刻度) 我刷新代碼:刷新組合框,並重新選擇C#中的最後一項#

prog.comboBox1.Items.Clear(); 
foreach (string client in data.Split('#')) 
{ 
     prog.comboBox1.Items.Add(client); 
} 

,我已經試過刷新後rechoose項目(它不工作)的代碼是:

string previous = prog.comboBox1.GetItemText(prog.comboBox1.SelectedItem); 
//Refresh list here (With the code above) 
if (prog.comboBox1.Items.Contains(previous)) 
     prog.comboBox1.Text = previous; 

有什麼辦法做我想做的事情?

+0

你怎麼刷新?這個Web應用程序? – Damith

+0

嘗試吹動SelectedItem並將其設置回來。如果您設置了「文本」,則會覆蓋(隨機)當前項目的文本... – Shnugo

+0

但是,如果是這樣,我將不得不將前一項保存爲對象,並且將無法使用包含屬性。 – pystudent

回答

1

我不確定這是否是一個好的界面。操作員正在選擇一些東西,而當他按下鼠標按鈕來點擊列表被改變時。你確定這不會導致錯誤的項目被選中?

將此與在文件資源管理器中選擇要刪除的文件進行比較。您選擇要刪除的文件,另一個進程更改文件夾的內容,從而導致選擇不正確的文件。

如果在鼠標單擊選中的項目時無效,該選擇什麼?如果用戶點擊,避開他的眼睛到OK按鈕並且沒有看到他選擇了不正確的項目?您是否考慮過如果操作員使用鍵盤和箭頭鍵選擇組合框中的項目會發生什麼情況?

如果您在選擇時執行操作,而不是選擇並按下OK按鈕,則此用戶界面特別危險。

如果你看看其他常見的Windows應用程序裏的東西可能選擇過程中改變你總是看到以下場景:

  • 可以選擇項目的集合變得可見的那一刻,系統確定集合
  • 雖然這個系列是可見的,收不改變
  • 選擇集合中的項目不執行操作
  • 操作員按下後唯一確定(或繼續/下一首/其他),T檢查選擇的有效性。

如果添加一個確認按鈕,並使用下面的場景,那麼你不會有你的問題:

  • 一旦打開組合框下拉列表的情況下,您添加現有項目
  • 操作員選擇該項目,並可能選擇其他項目
  • 一旦確認選擇事件,您將檢查所選的所有項目是否仍然有效,並繼續或通過錯誤提供程序或消息框顯示某些錯誤。

因此,我建議您通過添加確認按鈕重新考慮您的用戶界面,運營商將會爲此感謝您。

0

類似的東西:

// to prevent re-drawing 
prog.comboBox1.BeginUpdate(); 

try { 
    // swicth event processing off: 
    // do not pay attention to selected index changing while refresing the combo 
    prog.comboBox1.SelectedIndexChanged -= prog.comboBox1_SelectedIndexChanged; 

    try { 
    prog.comboBox1.Items.Clear(); 
    // You don't want the foreach loop... 
    prog.comboBox1.Items.AddRange(data.Split('#')); 
    } 
    finally { 
    // swicth event processing back on 
    prog.comboBox1.SelectedIndexChanged += prog.comboBox1_SelectedIndexChanged; 
    } 

    // Finally, select the item 
    prog.comboBox1.Items.SelectedIndex = ... 
} 
finally { 
    prog.comboBox1.EndUpdate(); 
}