質問編集履歴
5
スタックオーバーフローの内容を補足に追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,10 +24,6 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
SelectedIndexChangedが呼ばれることに不具合が発生しています。
|
28
|
-
|
29
|
-
|
30
|
-
|
31
27
|
メイン画面から複数のサブ画面を呼び出しており、メイン画面はファンクションキーで共通処理を行います。
|
32
28
|
|
33
29
|
共通処理でメッセージボックスを表示する機能があります。
|
@@ -44,15 +40,13 @@
|
|
44
40
|
|
45
41
|
|
46
42
|
|
47
|
-
これは当時のテストケースにメッセージボックスの表示が含まれていなかったことが原因だと思いますが、今後を考えて原因を知りたいです。
|
48
|
-
|
49
43
|
|
50
44
|
|
51
45
|
###試したこと
|
52
46
|
|
53
47
|
|
54
48
|
|
55
|
-
|
49
|
+
コンボボックスのアンフォーカスでは、SelectedIndexChanged が呼ばれませんでした。
|
56
50
|
|
57
51
|
コンボボックスのボタン押下イベントでファンクションキーを取得し、ドロップダウンリストを閉じることで一旦解決しました。
|
58
52
|
|
@@ -60,7 +54,7 @@
|
|
60
54
|
|
61
55
|
しかし、メイン画面の共通処理は不完全で、サブ画面ごとに個別にファンクションキーの処理を変えている時もあります。
|
62
56
|
|
63
|
-
|
57
|
+
今後もメイン画面の共通処理は変更される可能性があります。
|
64
58
|
|
65
59
|
|
66
60
|
|
@@ -111,8 +105,6 @@
|
|
111
105
|
cb2.Location = new System.Drawing.Point(0, cb.Height + 10);
|
112
106
|
|
113
107
|
|
114
|
-
|
115
|
-
cb2.Items.AddRange(new[] { "a", "b", "c" });
|
116
108
|
|
117
109
|
cb2.SelectionChangeCommitted += (s, e) => Debug.WriteLine("SelectionChangeCommitted2");
|
118
110
|
|
@@ -181,3 +173,19 @@
|
|
181
173
|
Visual Studio 2015
|
182
174
|
|
183
175
|
.Net Framework 2.0
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
##補足
|
180
|
+
|
181
|
+
スタックオーバーフローでも似たような内容がありました。
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
「コンボボックスのドロップダウンメニューが閉じ、ユーザーが行ったコミットされていない選択を破棄することが起因している」とあります。
|
186
|
+
|
187
|
+
アンフォーカスでは破棄されず、メッセージボックスの表示で破棄されるのは何故でしょうか?
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
<https://stackoverflow.com/questions/14760076/messagebox-show-causes-selected-value-to-be-reverted-during-combobox-selectionch>
|
4
フォーカスの移動のコードを追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -72,6 +72,12 @@
|
|
72
72
|
|
73
73
|
リストの内容が空でも、表示されます。
|
74
74
|
|
75
|
+
F10でActiveControl = null によるコンボボックスのアンフォーカスをします。
|
76
|
+
|
77
|
+
F11で他のコンボボックスにフォーカスを移します。
|
78
|
+
|
79
|
+
F10,F11では"SelectedIndexChanged"が出力ウィンドウに表示されませんでした。
|
80
|
+
|
75
81
|
|
76
82
|
|
77
83
|
```c#
|
@@ -98,15 +104,71 @@
|
|
98
104
|
|
99
105
|
|
100
106
|
|
107
|
+
ComboBox cb2 = new ComboBox { DropDownStyle = ComboBoxStyle.DropDownList };
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
cb2.Location = new System.Drawing.Point(0, cb.Height + 10);
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
cb2.Items.AddRange(new[] { "a", "b", "c" });
|
116
|
+
|
117
|
+
cb2.SelectionChangeCommitted += (s, e) => Debug.WriteLine("SelectionChangeCommitted2");
|
118
|
+
|
119
|
+
cb2.SelectedIndexChanged += (s, e) => Debug.WriteLine("SelectedIndexChanged2");
|
120
|
+
|
121
|
+
|
122
|
+
|
101
123
|
Controls.Add(cb);
|
124
|
+
|
125
|
+
Controls.Add(cb2);
|
102
126
|
|
103
127
|
|
104
128
|
|
105
129
|
KeyPreview = true;
|
106
130
|
|
107
|
-
KeyUp += (s, e) =>
|
131
|
+
KeyUp += (s, e) =>
|
108
132
|
|
133
|
+
{
|
134
|
+
|
135
|
+
switch(e.KeyCode)
|
136
|
+
|
137
|
+
{
|
138
|
+
|
139
|
+
case Keys.F10:
|
140
|
+
|
109
|
-
|
141
|
+
ActiveControl = null;
|
142
|
+
|
143
|
+
break;
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
case Keys.F11:
|
148
|
+
|
149
|
+
if (cb.Focused) cb2.Focus();
|
150
|
+
|
151
|
+
else cb.Focus();
|
152
|
+
|
153
|
+
break;
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
case Keys.F12:
|
158
|
+
|
159
|
+
MessageBox.Show("");
|
160
|
+
|
161
|
+
break;
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
default:
|
166
|
+
|
167
|
+
break;
|
168
|
+
|
169
|
+
}
|
170
|
+
|
171
|
+
};
|
110
172
|
|
111
173
|
}
|
112
174
|
|
3
アンフォーカスの修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[Windows Form] コンボボックスのリストを開いている時にメッセージボックスを表示するとSelectedIndexChangedが呼ばれるのはなぜですか?
|
1
|
+
[Windows Forms] コンボボックスのリストを開いている時にメッセージボックスを表示するとSelectedIndexChangedが呼ばれるのはなぜですか?
|
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
|
54
54
|
|
55
|
-
ActiveControl = null によるコンボボックスのフォーカスでは呼ばれませんでした。
|
55
|
+
ActiveControl = null によるコンボボックスのアンフォーカスでは呼ばれませんでした。
|
56
56
|
|
57
57
|
コンボボックスのボタン押下イベントでファンクションキーを取得し、ドロップダウンリストを閉じることで一旦解決しました。
|
58
58
|
|
2
タグを変更
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
1
ソースコードの説明を追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -66,6 +66,12 @@
|
|
66
66
|
|
67
67
|
### 原因が再現するソースコード
|
68
68
|
|
69
|
+
新規 Windows Formに下記コードを貼り付けることで再現されます。
|
70
|
+
|
71
|
+
コンボボックスを開いたまま F12を押すと"SelectedIndexChanged"が出力ウィンドウに表示されます。
|
72
|
+
|
73
|
+
リストの内容が空でも、表示されます。
|
74
|
+
|
69
75
|
|
70
76
|
|
71
77
|
```c#
|
@@ -90,6 +96,8 @@
|
|
90
96
|
|
91
97
|
//cb.PreviewKeyDown += (s, e) => { if (e.KeyCode == Keys.F12) cb.DroppedDown = false; }; //修正方法
|
92
98
|
|
99
|
+
|
100
|
+
|
93
101
|
Controls.Add(cb);
|
94
102
|
|
95
103
|
|