C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

コンボボックスから出た処理を行うには?

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■96136 / inTopicNo.1)  コンボボックスから出た処理を行うには?
  
□投稿者/ アズキ (1回)-(2020/10/22(Thu) 22:21:18)

分類:[.NET 全般] 

    Private Sub ComboBox1_MouseEnter(sender As Object, e As EventArgs) Handles ComboBox1.MouseEnter

	コンボボックスにカーソルが入った処理

    End Sub

    Private Sub ComboBox1_MouseLeave(sender As Object, e As EventArgs) Handles ComboBox1.MouseLeave

	コンボボックスからカーソルが出た処理

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

            MessageBox.Show("test",
                "", MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub


コンボボックスをクリックしなければ、
このコードで正常に動作するのですが、
コンボボックスをクリックして、メッセージボックスが表示されるようにすると、
コンボボックスの外にカーソルが出たにも拘わらず、
Leave処理が行われません。

そのため、以下のように改良してみました。

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

            MessageBox.Show("test",
                "", MessageBoxButtons.OK, MessageBoxIcon.Information)

        Call ComboBox9_MouseLeave(sender, e)

    End Sub


これで、Leave処理は行われるようにはなったのですが、
再度、カーソルをコンボボックス内に入れても、
ComboBox1_MouseEnterが実行されません。
一度、コンボボックスの外に出してから、再度入れないと、ComboBox1_MouseEnterが実行されません、

つまり、MessageBoxを使ってカーソルがコンボボックスの外側に出た場合
ComboBox1_MouseLeaveを実行したとしても、
プログラムの裏側では、まだ、カーソルがボックスの内側にあると認識されているために、
ComboBox1_MouseEnterが実行されないようです。

これはどのようにすれば良いでしょうか?



引用返信 編集キー/
■96138 / inTopicNo.2)  Re[1]: コンボボックスから出た処理を行うには?
□投稿者/ kiku (203回)-(2020/10/23(Fri) 09:48:48)
No96136 (アズキ さん) に返信
> コンボボックスをクリックしなければ、
> このコードで正常に動作するのですが、
> コンボボックスをクリックして、メッセージボックスが表示されるようにすると、
> コンボボックスの外にカーソルが出たにも拘わらず、
> Leave処理が行われません。

MessageBoxがない状態で下記を実験したところ、
MouseLeaveイベントが発生しないことを確認しました。

1.ComboBox上にマウスを持っていく => MouseEnterイベント発生
2.ComboBox上のアイテムを選択する => SelectedIndexChangedイベント発生
3.このときに選択するのと同時にカーソルは外に出ている => MouseLeaveイベントは発生しない

下記のようにアイテムを選択しなければ、MouseLeaveイベントが発生します。
1.ComboBox上にマウスを持っていく => MouseEnterイベント発生
2.ComboBox外にマウスを持っていく => MouseLeaveイベント発生

MouseLeaveイベントは、これが仕様のように感じます。
なので
タイマーなどでマウスがComboBox上に存在するかどうかをチェックするなど
するしかないように思いました。
引用返信 編集キー/
■96158 / inTopicNo.3)  Re[2]: コンボボックスから出た処理を行うには?
□投稿者/ アズキ (2回)-(2020/10/23(Fri) 22:08:17)
No96138 (kiku さん) に返信

タイマーを使うのは処理が多くなるので避けたいです。

恐らく内部変数でカーソルがコンボボックスの中にいるかどうか判定していると思うのですが
ユーザー側が、この内部変数を変える方法はございませんでしょうか?
引用返信 編集キー/
■96159 / inTopicNo.4)  Re[3]: コンボボックスから出た処理を行うには?
□投稿者/ アズキ (3回)-(2020/10/23(Fri) 22:35:32)
あるいは、
コンボボックスをクリックするとプルダウンメニューが開きますが
このメニューが閉じるアクション時にプログラムを実行することってできないでしょうか?

引用返信 編集キー/
■96160 / inTopicNo.5)  Re[4]: コンボボックスから出た処理を行うには?
□投稿者/ 魔界の仮面弁士 (2889回)-(2020/10/23(Fri) 22:38:27)
No96159 (アズキ さん) に返信
> コンボボックスをクリックするとプルダウンメニューが開きますが
> このメニューが閉じるアクション時にプログラムを実行することってできないでしょうか?

DropDownClosed イベント?
引用返信 編集キー/
■96161 / inTopicNo.6)  Re[5]: コンボボックスから出た処理を行うには?
□投稿者/ アズキ (4回)-(2020/10/23(Fri) 22:47:45)
No96160 (魔界の仮面弁士 さん) に返信

これでいけそうです。

どうもありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ