質問するログイン新規登録

回答編集履歴

3

追記

2021/06/30 07:35

投稿

退会済みユーザー
answer CHANGED
@@ -7,4 +7,32 @@
7
7
  2. ListViewではなくReadOnlyなDataGridViewで代用する。
8
8
  (DataGridViewは未選択状態にならないので)
9
9
 
10
- といった方法もあります。
10
+ といった方法もあります。
11
+
12
+ ---
13
+
14
+ 質問のような状態になる原因が個人的に気になったので検証してみましたが、
15
+ 単純に項目領域外をクリックして選択解除されるだけの時のイベントは
16
+ 0. MouseDown
17
+ 0. ItemSelectionChanged (選択解除)
18
+
19
+ のように流れるので、このケースで再選択させるのはおそらく上手くいきます。
20
+ しかし、選択中の項目から別の項目を選択した場合のイベントは
21
+ 0. MouseDown
22
+ 0. ItemSelectionChanged (選択解除)
23
+ 0. ItemSelectionChanged (新しい項目を選択)
24
+
25
+ のように流れ、2に再選択処理を割り込ませると、既に選択解除した項目を選択し、更に新しい項目も選択しているような感じになり、ここで表示とプロパティの整合性が取れなくなり、動作がおかしくなっている感じがします。
26
+
27
+ 極力ウィンドウメッセージを殺さないようにするなら、
28
+ ```C#
29
+ private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
30
+ {
31
+ //何も選択されていなかったらスペースキーを送信して再選択
32
+ if (listView1.SelectedIndices.Count == 0)
33
+ {
34
+ SendKeys.Send(" ");
35
+ }
36
+ }
37
+ ```
38
+ シンプルにこんなのでもいいかもしれません。

2

修正

2021/06/30 07:34

投稿

退会済みユーザー
answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > ListViewから項目を選択してOKボタンを押すようなUIで、OKボタンを押してなにも選択されていなかった際に、いちいち「項目を選択してください」とエラーを出すより、そもそも「なにも選択されていない」という状況を生み出せないように、上記のようなことをしたいです。
2
2
 
3
3
  消極的な解決策としてば、
4
- 1. SelectedIndexChanged あたりで選択されていない状態を検出し、OKボタンEnabledを操作する
4
+ 1. SelectedIndexChanged あたりで選択されていない状態を検出し、OKボタンEnabledを操作する
5
5
  (一応エラーは出さなくて済む)
6
6
 
7
7
  2. ListViewではなくReadOnlyなDataGridViewで代用する。

1

修正

2021/06/29 02:32

投稿

退会済みユーザー
answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > ListViewから項目を選択してOKボタンを押すようなUIで、OKボタンを押してなにも選択されていなかった際に、いちいち「項目を選択してください」とエラーを出すより、そもそも「なにも選択されていない」という状況を生み出せないように、上記のようなことをしたいです。
2
2
 
3
3
  消極的な解決策としてば、
4
- 1. SelectedIndexChanged あたりで選択されていない状態を検出し、OKボタンをEnable=Falseにする
4
+ 1. SelectedIndexChanged あたりで選択されていない状態を検出し、OKボタンをEnabledを操作する
5
5
  (一応エラーは出さなくて済む)
6
6
 
7
7
  2. ListViewではなくReadOnlyなDataGridViewで代用する。