トップ回答者
ListBoxのリストの選択状態を解除するタイミングとその方法

質問
-
DataGridViewへの入力時に、3列目のデータはListBoxの項目を選択して入力することも可能にしています。
この際に、次の行に移って3列目のデータを入力しようとすると、前の行で選択した状態がListBoxに残っています。
このままでも全く不都合はないのですが、できるならば、以前の選択状態は解除しておきたいと思います。
そこで、下のコードにあるように、listBox1.ClearSelected();をあちこちで試してみましたが、
どの場合もListBoxから選択して入力した3列目のデータが消えてしまいます。private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { DataGridView dgv = (DataGridView)genkinDataGridView; string s = listBox1.Text; int iSelect = listBox1.SelectedIndex; int iRow = dgv.CurrentCell.RowIndex; dgv[3, iRow].Value = s; switch (iSelect) { case 0: case 2: case 3: case 5: dgv.Select(); SendKeys.Send("{Tab}"); //listBox1.ClearSelected(); break; case 1: case 4: case 6: dgv.Select(); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); //listBox1.ClearSelected(); break; } } private void listBox1_Leave(object sender, EventArgs e) { //listBox1.ClearSelected(); }
zen73
回答
-
そこで、下のコードにあるように、listBox1.ClearSelected();をあちこちで試してみましたが、
SelectedIndexChanged イベントがどのような時に起きるか確認して下さい。
どの場合もListBoxから選択して入力した3列目のデータが消えてしまいます。
ListBox で何か選択したとき、選択が解除されたときのどちらでも発生するので、ClearSelected を実行すると選択が解除されて、SelectedIndexChanged が呼ばれて、listBox1.Text が空になっているにも関わらず、それを DataGridView に代入しているのでしょう。
どこで選択を解除したところで現象は発生するので、「何の条件を満たしたときに 3 列目に値を代入するのか」ということをよく考えて下さい。
なお、選択が解除されている場合、SelectedIndex は -1 になります。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク zen73 2009年9月26日 5:36
すべての返信
-
そこで、下のコードにあるように、listBox1.ClearSelected();をあちこちで試してみましたが、
SelectedIndexChanged イベントがどのような時に起きるか確認して下さい。
どの場合もListBoxから選択して入力した3列目のデータが消えてしまいます。
ListBox で何か選択したとき、選択が解除されたときのどちらでも発生するので、ClearSelected を実行すると選択が解除されて、SelectedIndexChanged が呼ばれて、listBox1.Text が空になっているにも関わらず、それを DataGridView に代入しているのでしょう。
どこで選択を解除したところで現象は発生するので、「何の条件を満たしたときに 3 列目に値を代入するのか」ということをよく考えて下さい。
なお、選択が解除されている場合、SelectedIndex は -1 になります。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク zen73 2009年9月26日 5:36
-
回答ではなく代案ですが(答は Azulean さんのレスの通りと思います)、3列目に DataGridViewComboBoxColumn
クラスを使用してはいかがですか?DataGridViewComboBoxColumn クラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridviewcomboboxcolumn.aspx