2012-03-21 5 views
0

長いアイテムリストを表示できるComboBoxがあります。実際にフォームを追加または削除することなく、これらのアイテムの表示テキストを変更する必要のあるフォーム上の関数があります。データバインディングはありません。アイテムリストに直接アクセスしています。WindowsフォームでComboBox内のアイテムを変更する

問題は、アイテムリストのアイテムのプロパティを変更すると、コンボボックスのテキストが更新されないということです。 ComboBoxから別の隣接するComboBoxに項目を移動できるボタンがあり、移動したときに正しく表示されるため、問題は再描画されないようです。

Invalidate()、Refresh()、Update()を呼び出そうとしましたが、動作しません。私はComboBoxをクリアしてすべてを読み込めると思いますが、このボックスは何千ものアイテムを保持できるので、それが効率的な方法であるかどうかはわかりません。

+2

コードを追加してください。また、移動したら、正しく表示されます。しかし、正しく表示されないという問題はありませんか?たぶん私は何かを逃した。 –

+0

コンボボックスはデータソースにバインドされていますか?そのデータソースの項目がINotifyPropertyChangedを実装していますか? – Reddog

+0

ComboBoxに追加するアイテムのタイプ2.別のComboBoxに正常に移動するコードを管理するコード3.プロパティを更新するコード4.表示するプロパティを決定する方法ComboBox – kaj

答えて

0

コンボボックスのテキストプロパティを設定するだけで試してみてください。もちろん

combobox1.Text = "newText"; 

あなたはまだ以前のように項目を変更する必要があります。

0

データバインディングなしでアイテムラベルを更新することはできないようです。したがって、残っている唯一のことは、従っているアイテム(Items.RemoveAt)を削除し、再度挿入することです(Items.Insert)。

0

あなたは、次の手順を実行する必要があります。

  1. 検討中の項目のインデックスを取得する項目の表示テキストやアイテムを入手自体が
  2. 挿入項目の表示テキストを置き換えます同一のインデックスに戻るアイテム

ここにサンプルコードがあります:

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); 

あなたがあり、このコードスニペットをループ関数がそれをしない場合:項目は次のことを試して、他よりも文字列型である場合、EMSは)文字列タイプの

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

です複数の商品の場合

関連する問題