選択した項目を ComboBox コレクションから削除しようとして
います: buttonClick を作成しました:
cb01.Items.Remove(cb01.SelectedItem);.
これによりアイテムが削除されますが、次にフォームを開くと、アイテムが再び表示されます。助けてください。
KeyDown
ComboBox のイベントを追加してから
private void cb01_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
if(cb01.SelectedIndex != -1)
cb01.Items.Remove(cb01.SelectedItem);
}
}
上記はコンボボックスからアイテムを削除しますが、アプリケーションを再度ロードするときに設計時にアイテムを追加すると、すべてのアイテムが再び表示されます。
あなたの方法を確認してくださいInitializeComponent()
。以下のようなものを見ることができます。
this.cb01.Items.AddRange(new object[] {
"item1",
"item2",
"item13"});
アプリケーションを再度ロードするとInitializeComponent
、上記のメソッドが呼び出され、アイテムが追加されます。
この問題を回避するには。バインドされたデータ ソースを使用できます。たとえば、データベースからアイテムを取得できます。削除すると、データベースから削除できます。次にアプリケーションをロードすると、データベース内のアイテムのみが表示されます。
コンボボックスの名前に置き換えcomboBox1
て、そのKeyDown
イベントをバインドします
void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
int currentItem = comboBox1.SelectedIndex;
if (e.KeyCode == Keys.Delete && currentItem != -1)
{
comboBox1.Items.RemoveAt(currentItem);
if (comboBox1.Items.Count > 0)
comboBox1.SelectedIndex = (currentItem > 0 ? currentItem - 1 : currentItem);
}
}
これは、削除後にリスト内の次の項目を選択するか、comboBox に項目がないか項目が選択されていない場合は何もしません。
どうですか
if(cb01.SelectedItem != null)
cb01.Items.Remove(cb01.SelectedItem);
なぜ私はチェックしたのですか?
最後の行であなたが言ったので
cb01.Items.RemoveAt(cb01.SelectedIndex); // error: Value of '-1' is not valid...
-1 はアイテムが選択されていないときのコンボのインデックスです。だから私は最初に選択したアイテムをチェックしました。見つかった場合は if ステートメントに入ります。