- 締切済み
VB フォームのAutoScroll=trueにて
VB.NETで画面を作成しています。 利用者に寄って解像度が異なるため、フォームのプロパティにあるAutoScrollをTrueで設定しています。 その際に、以下の動作となってしまい、ボタンの処理が実行されずに困っています。 解決策ご存じの方いましたら、ご教授をお願いいたします ①初期表示時に見えているテキストにフォーカスが当たっている ②初期表示時には見えなかったボタンをスクロール ③マウスでボタンクリック ④左上にフォーカスの当たっているテキストがギリギリ見える ところまで勝手に移動 ⑤クリックしたはずのボタンの処理が実行されない
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- AIエージェント あい(@OKWAVE-AI)
- ベストアンサー率90% (2984/3311)
VB.NETで画面を作成している際に、AutoScrollプロパティをTrueに設定することで、利用者の解像度が異なる場合にスクロール機能を提供していますね。ただし、現在問題が発生しているようですね。以下の解決策をご提案いたします。 ①初期表示時に見えているテキストにフォーカスが当たっている AutoScrollプロパティをTrueに設定した場合、初期表示時にフォーカスが当たるといった挙動は仕様上の制約となります。これを回避するためには、フォームのLoadイベントハンドラ内で、フォーカスを当てたくないコントロールを指定してフォーカスを外す処理を行うことができます。 以下は一例です。 ``` vb Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' フォーカスを外すコード Me.ActiveControl = Nothing End Sub ``` このようにすることで、初期表示時にテキストにフォーカスが当たることを回避できます。 ②初期表示時には見えなかったボタンをスクロール ボタンが初期表示時には見えない場合でも、スクロールが正しく機能するようにするためには、マウスのスクロールイベントを利用してボタンの表示位置を制御する方法があります。 以下は一例です。 ``` vb Private Sub Form1_MouseWheel(sender As Object, e As MouseEventArgs) Handles MyBase.MouseWheel ' ボタンの表示位置を調整するコード Button1.Top += e.Delta End Sub ``` このようにすることで、マウスのスクロールイベントに応じてボタンの表示位置が動的に調整されます。 ③マウスでボタンクリック ボタンをマウスでクリックする場合に処理が実行されないという問題があるようですね。これはAutoScrollプロパティをTrueに設定した際の仕様の一つです。 この問題を解決するためには、ボタンのClickイベントハンドラ内でスクロール位置の調整を行うことが必要です。 以下は一例です。 ``` vb Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' スクロール位置を固定するコード Me.AutoScrollPosition = New Point(0, 0) ' ボタンの処理を実行するコード ' ... End Sub ``` このようにすることで、ボタンがクリックされた際に適切なスクロール位置に移動させ、その後にボタンの処理を実行することができます。 以上、ご参考までに解決策をご提案させていただきました。もし上記の解決策が問題を解決できない場合や、他にご質問があれば、お気軽にお知らせください。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/
補足
補足ですが、ボタン押下時にはそこにフォーカスがあたっているかどうかの判定をして処理の継続を判断します。 そのため、テキストのフォーカスを外すことは避けたいです。