2012-03-21 27 views
0

我有一個ComboBox可以顯示一長串項目。表單上有一個功能,需要更改這些項目的顯示文本,而無需實際添加或刪除任何項目。沒有數據綁定正在進行,我直接訪問Items列表。在Windows窗體中修改ComboBox中的項目

問題是,如果我修改項目列表中項目的任何屬性,它不會更新組合框中的文本。有一個按鈕可以將一個項目從ComboBox移動到另一個相鄰的ComboBox,當它移動時它會正確顯示,所以問題似乎只是它不重繪它。我試過調用Invalidate(),Refresh(),Update(),但它不起作用。我想我可以清除組合框並讀取所有內容,但是此框可以容納數千個項目,因此我不確定這是否是一種有效的方法。

+2

請問您可以添加一些代碼?此外,你說它被移動時它顯示正確。但是,不是你的問題,它不正確顯示?也許我錯過了什麼。 – 2012-03-21 21:10:19

+0

組合框是否綁定到數據源?該數據源中的項目是否實現INotifyPropertyChanged? – Reddog 2012-03-21 21:14:08

+0

你可以顯示1.什麼類型的項目你添加到組合框2.代碼,管理將其成功移動到另一個組合框3.更新屬性的代碼4.如何確定哪些屬性用於顯示在ComboBox – kaj 2012-03-21 21:18:00

回答

0

請儘量簡單的設置組合框文本屬性:

combobox1.Text = "newText"; 
當然

,你仍然需要更改的項目如前。

0

似乎無法在沒有數據綁定的情況下更新項目標籤。所以唯一剩下的就是刪除相關項目(Items.RemoveAt)並再次插入(Items.Insert)。

0

你需要做以下步驟:

  1. 獲得該項目的索引考慮
  2. 獲得該項目顯示文本或項目本身
  3. 更換的項目顯示文本
  4. 插入該項目返回相同索引

這裏是一個示例代碼: (假設你的它EMS是型)

int itemIndex = comboBox1.Items.IndexOf("yourItem"); 
string itemText = comboBox1.Items[itemIndex].ToString(); 
itemText = "yourNewString"; 
comboBox1.Items.Insert(itemIndex, itemText); 

的,如果項目以外類型的請嘗試以下操作:

int itemIndex = comboBox1.Items.IndexOf(/*your item*/); 
var item = comboBox1.Items[itemIndex]; 
//type cast back to the original type 
//change the display text i.e. by changing the display member inside your object 
comboBox1.Items.Insert(itemIndex, item); 

您可以循環在此代碼段,如果你的函數做它多個項目

相關問題