【.NET】ComboBoxコントロールの挙動が気になる

こんにちは、irislabのちひろです。

今回はMicrosoft .NET Framework(C#, VB.NET)のプログラムでComboBoxコントロールを使用した際に気になった挙動について書いてみようと思います。

さて、私が気になったのはプログラム実行時にComboBoxコントロールのドロップダウンリストを表示している時の挙動です。
まずは下の二つの表をご覧ください。

[表1]

項目 DropDown DropDownList Simple
Textプロパティ × ×
SelectedIndexプロパティ
SelectedTextプロパティ × × ×
SelectedValueプロパティ
SelectedItemプロパティ
TextChangedイベント × × ×
SelectedIndexChangedイベント × × ×
SelectedValueChangedイベント × × ×

[表2]

項目 DropDown DropDownList Simple
Textプロパティ
SelectedIndexプロパティ
SelectedTextプロパティ ×
SelectedValueプロパティ
SelectedItemプロパティ
TextChangedイベント ×
SelectedIndexChangedイベント
SelectedValueChangedイベント

さて、これだけでは情報が不足しているので諸々説明していきます。

まず、表中のDropDown、DropDownList、SimpleはComboBoxのDropDownStyleプロパティに設定している内容を表しています。

次に、[表1][表2]の違いは表示中のドロップダウンリストに対して行った操作の違いです。
[表1]はドロップダウンリストの項目上でマウス移動操作を行った場合です。
(※ただし、DropDownStyleがSimpleの場合は項目上をドラッグ操作しています。)
[表2]はドロップダウンリストでキーボードの上下キーを押した場合です。

最後に○と×の意味ですが、これは上記で説明している操作を行った際に、[項目]の内容がどうなったのかを示しています。
[項目]がプロパティの場合・・・○=変化有り、×=変化無し
[項目]がイベントの場合・・・○=イベント発生有り、×=イベント発生無し

いかがでしょうか。想定されていた通りの動作をしていたでしょうか。
例えば[表1]から分かるのが、プログラム実行中にDropDownStyleプロパティをDropDownListに設定したComboBoxのドロップダウンリストを開いて項目上をマウス移動すると、クリックしていなくてもTextプロパティが変化してしまうのです。
しかもTextプロパティの値が変化しているのにTextChangedイベントは発生しない事がわかります。

それ以外にもSelectedIndexプロパティが変化しているのにSelectedTextプロパティが変化しなかったりと、個人的に考えていた動きと差異があるものもありました。

プログラムでTextChanged等のイベントを重要な処理のトリガーにしていたり、ユーザーが操作している最中に別スレッドからTextプロパティにアクセスする処理を見かけた場合は、この辺りが想定している動きになっているかどうか確認した方が良いかもしれませんね。
特にComboBoxコントロール等は、”何となく”で使えてしまうコントロールなだけに注意が必要そうです。


関連する記事

カテゴリー: .Net タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれないコメントは無視されますのでご注意ください。(スパム対策)