Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
フォームがエンターキーでクローズしない
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30928#CommentId86043
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2023/12/16 08:01:39
疑問符「?」や感嘆符「!」の後には句点「。」を付けません。
https://www.jagat.or.jp/archives/12121
https://www.asobou.co.jp/blog/bussiness/punctuation#i-2
> これは、TextBox1.KeyUp が、直前に表示された MsgBox 内のキー操作に反応していると云う事でしょうか?。
というか【抑論】として、キーボード系イベント/フォーカス遷移系イベント/マウスUpDown系イベントで
メッセージボックスを使うようなデバッグ方法は避けるべきです。
メッセージボックスの表示によってフォーカスの移動が伴うことになりますし、
OK ボタンの操作のためにキーボードやマウス操作が必要になるため、
本来受け取るはずだったイベントの処理が変わってしまうことになるからです。
キーやマウスの Down と Up の間のタイミングなどで、本来とは異なる割り込み処理を入れてしまうと、
今回のように、事前に想定しにくい問題に悩まされることになりかねません。
もしも一時停止的な意味合いは無く、イベントなどの処理順を追跡したいという目的だけであれば、
メッセージボックスを使う代わりに
Debug.WriteLine(何某)
Trace.WriteLine(何某)
ListBox1.Items.Insert(0, 何某)
TextBox1.AppendText(何某 & vbCrLf)
などを用いることをお奨めします。これならば、本来の処理が阻害されずに済むでしょう。
> それで出てきた MsgBox の[OKボタン]をマウスでクリックしていくと "tKU" は出てきませんが
それはタイミングの問題ですね。
TextBox 上で最初に押したキーを、離さずに押し続けてみてください。
その状態で OK ボタンをクリックしていきましょう。
メッセージが出なくなったところで、TextBox 上でキーを離してみれば、"tKU" が表示されるはずです。
そしてメッセージが出ている最中にキーを離せば、"tKU" は表示されません。
あるいは TextBox に戻った後、TextBox 以外のコントロールにフォーカスを移してから
キーを離せば、やはり "tKU" は表示されないはずです。
> エンターキーを押していくと最後に "tKU" が繰り返されてマウスでクリックしないと終われません。
メッセージが閉じた時には、Enter(あるいがEsc)が押された状態のまま、フォーカスが TextBox に戻ります。
その状態で Enter キーが離されることで、"tKU" が表示された…という状況ですね。
そして "tKU" を閉じるために Enter を押すことになるので、この動作が繰り返される、と。
Enter を「押す」のではなく、「押しっぱなしにする」と、動きが分かりやすいと思いますよ。
そして Enter や Escape ではなく、Space キーで OK を操作すると違う結果になります。
何故なら[Space]キーで OK ボタンを押す場合、メッセージが閉じられるのはキーを離したタイミングだからです。
それに対して[Enter]キーや[Esc]キーの場合は、メッセージが閉じられるのはキーを押したタイミングです。
TextBox 上で [Shift]を押しっぱなしにして "tPKD" を出し、[Shift] を離さずに [Space] を押して閉じます。
続けて "tKD" が出るので、それも[Shift] を離さずに [Space] を押して閉じてみましょう。
Space による操作では、TextBox に戻ったときには キーを離した後なので、
先の Enter の場合と違って、連続してメッセージが出てしまうようなことはなく、
TextBox に戻った後で [Shift] を離したときに、"tKU" が表示されることになります。