|
■No92113 (井上 さん) に返信 > コンボボックスにフォーカス設定し、初期値0が表示されたテキストに、 > 1から99の値を手入力で変更した場合のイベント発生についてです。
Windows Form アプリケーションでしょうか。 ComboBox には 3 種のスタイルがありますが、どれのことでしょう?
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList 'ComboBox1.Items.Clear() ComboBox1.DataSource = Enumerable.Range(1, 99).ToArray() ComboBox1.SelectedIndex = -1
ComboBox2.DropDownStyle = ComboBoxStyle.DropDown 'ComboBox2.Items.Clear() ComboBox2.DataSource = Enumerable.Range(1, 99).ToArray() ComboBox2.SelectedIndex = -1 ComboBox3.DropDownStyle = ComboBoxStyle.Simple ComboBox3.Height = 180 'ComboBox3.Items.Clear() ComboBox3.DataSource = Enumerable.Range(1, 99).ToArray() ComboBox3.SelectedIndex = -1 End Sub
> 理想としては、「テキストの値変更→TextChangedイベント発生→フォーカスアウト→Leaveイベント発生」なのですが、 > 値を変更すると、「テキストの値変更→フォーカスアウト→Leaveイベント発生」となり、TextChangedイベントが発生しません。
上記の ComboBox2 や ComboBox3 にフォーカスがある状態(テキストが空)で、 キーボードから [Num1][Num2][Num3][Tab] と入力したところ、当方環境では TextUpdate TextChanged TextUpdate TextChanged TextUpdate TextChanged Leave の順でイベントが発生しましたよ。※IMEはオフの状態 テキスト部に直接入力するのではなく、リストから選ぶだけの場合には、 TextUpdate は発生せず、TextChanged だけになりますね。
> 原因は、値を変更した際にフォーカスアウトしてしまうため > TextChangedイベントではなく、Leaveイベントが発生すると考えたのですが、
「値を変更した際にフォーカスアウトしてしまう」事象は経験したことがありません…。
TextChanged イベントが使われるのは、テキスト部に自由な文字列を入れられる、 DropDown スタイルや Simple スタイルの場合に限られます。これらのスタイルでは、 テキスト部イベント(TextUpdate / TextChanged)と 選択リストイベント(SelectionChangeCommitted / SelectedValueChanged / SelectedIndexChanged) の両方が使われますし、Text プロパティと Selected何某プロパティは、明確に使い分けされます。
一方 DropDownList スタイルの場合は、そもそもテキストボックス部が無いため、 選択リストイベント(SelectionChangeCommitted / SelectedValueChanged / SelectedIndexChanged) のみが使われます。そもそも TextUpdate は発生すらしないようなので、 テキスト部イベント(TextUpdate / TextChanged)と の出番は無いでしょう。 一応 DropDownList スタイルであっても、TextChanged なら発生することもありますが、 手順によっては発生しないパターンもありますので、これに頼ることはほぼ無いはずです。 (マウス操作かキーボード操作か、ドロップダウンを伴うかどうかなどで変わる)
たとえば ComboBox1_SelectionChangeCommitted ComboBox1_TextChanged ★ ComboBox1_SelectedValueChanged ComboBox1_SelectedIndexChanged ComboBox1_Leave ComboBox1_Validating ComboBox1_Validated の順で発生することもあれば、TextChanged なしで ComboBox1_SelectionChangeCommitted ComboBox1_SelectedValueChanged ComboBox1_SelectedIndexChanged ComboBox1_Leave ComboBox1_Validating ComboBox1_Validated となることもあれば、 ComboBox1_SelectedValueChanged ComboBox1_SelectedIndexChanged ComboBox1_Leave ComboBox1_Validating ComboBox1_Validated ComboBox1_TextChanged ★ となることもありますね。
> また、他に良いアイデアがあればご教授していただけないでしょうか? そもそも何のために TextChanged を使用しようとしているのでしょうか。 何故 Leave の後だと都合が悪いのかという理由も分からないので、 今のままでは改善案の出しようがありません。(^_^;)
|