• 締切済み

VB フォームのAutoScroll=trueにて

VB.NETで画面を作成しています。 利用者に寄って解像度が異なるため、フォームのプロパティにあるAutoScrollをTrueで設定しています。 その際に、以下の動作となってしまい、ボタンの処理が実行されずに困っています。 解決策ご存じの方いましたら、ご教授をお願いいたします  ①初期表示時に見えているテキストにフォーカスが当たっている  ②初期表示時には見えなかったボタンをスクロール  ③マウスでボタンクリック  ④左上にフォーカスの当たっているテキストがギリギリ見える   ところまで勝手に移動  ⑤クリックしたはずのボタンの処理が実行されない

みんなの回答

回答No.1

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/

sekisoichiro
質問者

補足

補足ですが、ボタン押下時にはそこにフォーカスがあたっているかどうかの判定をして処理の継続を判断します。 そのため、テキストのフォーカスを外すことは避けたいです。

関連するQ&A

  • VBのフォームをスクロールさせるには

    VB6.0+WinXP環境です。 VBのフォームがありそのフォームは大きさを自由に変えられるとします。フォームを小さくした時に、フォーム上のボタンなどが、表示から隠れてしまいますが、フォームに水平および垂直スクロールバーをつけて、スクロールさせて表示できるようにしたいと思います。 簡単なコントロールを配置するだけで可能ですか。それともスクロールコントロールを配置して、座標やフォームの大きさや移動具合などを考慮して、プログラムをつくり込まないと駄目でしょうか。

  • VB2005について教えてください

    フォームを3つ作成し、実行時に最初に表示されるフォーム1にボタンを1つ配置し、そのボタンをクリックするとRadioButtonが一つとボタンが一つあるフォーム2が開きます。そして、フォーム2のボタンをクリックするとテキストボックスが一つとボタンが一つあるフォーム3が開きます。そこで、フォーム3のテキストボックスの中身をフォーム2のRadioButton.Textに表示させたいのですができません。フォーム1にRadioButtonを配置してRadioButton.Textに表示は出来るのですがフォーム2には表示させることが出来ません。どのようにすればできるのか教えてください。よろしくお願い致します。

  • アクセスでの計算フォーム

    VBの経験があるものですが、今回アクセス上で、VBのような計算フォームを作りたいと思ったのですが、エラーが出ます。 フォーム上のボタンを押すと、テキスト1~6を足して、答えのテキストに表示させるようにしたいのですが、デバッグをすると、VBの方でボタンクリックの部分で「コントロールがフォーカスを取得していないときにコントロール・・・」というエラーが出てきます。 手順として、テキストを作成し、ボタンを作成し、ボタンクリックのソース上で、テキスト1~6を足していく・・・ ということでは、まずいのでしょうか?

  • VB.NET フォームの縮小拡大について

    お世話になります。 VB.NETの初心者です。 フォームの縮小拡大について悩んでおります。 皆様のご意見を是非頂きたいです。 ・やりたいこと 画面のDPIによって画面表示は合わせかつ、ユーザがフォームにカーソルを当ててマウスで拡大、縮小できるようにしたい。 ・実施内容 VB.NETでフォームを作成し、そこにボタンが追加しました。 Windows7のコントロールパネルのデスクトップのカスタマイズ⇒ディスプレイのパーセントで 小:100%、中:125%のどちらでもフォームが正しく表示されるように、フォームのプロパティのAutoSizeをTrue、AutoScaleModel=DPIにしました。さらにユーザがフォームの縮小拡大をマウスでできるよう、AutoSizeModeをGrowOnlyにしました。 ・結果 フォームにあるボタンの端まで行くと、それ以上は縮小できず、拡大しても、フォームだけ大きくなり、ボタンは初期表示のサイズのまま変わりません。 ・質問 上記の「やりたいこと」を実現するにはフォームのプロパティの設定だけは不可能でしょうか。 また、実施するにはどのような方法をすればよいでしょうか。 皆様のお力を貸してください。 よろしくお願い致します。

  • ユーザーフォームのスクロールについて(エクセル2000VBA)

    お世話になります。 上下に長いユーザーフォームを作成し、スクロールして使っています。 1~4まで項目があり、ボタンをクリックするとその項目の先頭まで自動的にスクロールするような仕組みを作りたいのですがどうしたらよいでしょうか? Private Sub CommandButton1_Click()  TextBox1.SetFocus  '項目の先頭にあるテキストボックスに移動する End Sub という風なコードはできたのですが、ボタンの位置よりテキストボックスが下にあると、フォーカスしたテキストボックスがユーザーフォームの一番下に表示されてしまいます。 また、上方向にいく時も、テキストボックスの1行上に配置してあるタイトル(ラベルで作成しました)が表示されないので少し不便な気がします。 例えば、FAQサイトによくあるような、目次をクリックするとその項目が一番上に表示され、「Top」をクリックしてページ先頭にジャンプするような感じにしたいのですが…。 よろしくお願いします。

  • Windowsアプリケーションのフォームのフォーカスについて

    Windowsアプリケーションのフォームのフォーカスについて Windowsフォームアプリケーションを、C/C++で作成しています。 開発環境:Visual C++ 2008 Express Edition OS:WindowsXP テキストボックスに入力され、 フォーカスアウトした時に入力値の判定し、 偽だった時はボタンを非アクティブにする処理を実装しています。 しかし、タブ移動でのフォーカスアウトは可能なのですが、 フォームにマウスクリックした時にフォーカスが変わりません。 フォームにフォーカスを持たせることはできないのでしょうか? また、何か良い方法があったら教えていただけると幸いです。 宜しくお願いします。

  • アクセスのフォーム

    アクセスのフォームで、ヘッダー部にボタンを3つ作成し、それぞれ名前を"1","2","3"とします。そして、全てのボタンに埋め込みマクロで"1"にはクエリ1を実行する、"2"にはクエリ2を実行する、"3"にはクエリ3を実行するというマクロを埋め込みます この時ボタンをクリックすると、その結果がフォームの詳細部分に表示させる事はできますか?例えば"2"をクリックすれば詳細部分にクエリ2の結果が表示される様にしたいです。それぞれのクエリの構成は異なります。テーブル形式で表示されるのではなく、フォームの形式で表示される様にしたいです。 表示された文字をクリックするとヘッダー部のテキストボックスにその文字が入力され、クエリの抽出条件がそのテキストボックスになっており、クエリ実行ボタンを押せばその抽出条件でクエリが実行され、詳細部分に表示・・・という様に検索できる様にしたいです。文字をクリックすればテキストボックスへというのは以前この場で教えて頂きました。 説明がうまくできなくてすいません。誰か教えて下さい。 よろしくお願いします。

  • VB.NET2003で…

    フォーム1のコマンドボタンをクリックするとフォーム2が開き、フォーム1を閉じたいのですがどうすればいいのですか? 実行したときにフォーム1にシステム日付をラベルかテキストボックスに「2003年09月24日」と表示したいのですがどうすればいいのですか?

  • Access2010 SetFocusが当たらない

    Access2010です。 VBAにて、あるフォームの、デザイン上、「詳細」の中に存在しているテキストボックスにSetFocusでフォーカスを当てようと思ってます。 1 フォームロード時、フォームの「詳細」は非表示(当然、テキストボックスも非表示) 2 ボタンクリック時、フォームの「詳細」を表示し、テキストボックスにフォーカスを当てる という動作をしているのですが、2でテキストボックスにフォーカスがフォーカスが当たりません。どうしたらフォーカスが当たるのでしょうか? 以下、コードです。 Private Sub Form_Open(Cancel As Integer) Me.詳細.Visible = False End Sub Private Sub cmdボタン_Click() Me.詳細.Visible = True 'テキストボックスにフォーカスを当てる Me.txtテキスト.SetFocus End Sub よろしくお願いいたします。

  • VBからアクセスを実行したい!

    アクセスで作ったフォームやレポートなどをVBから実行したいのですが、方法がわかりません。たとえばVBでフォーム上にボタンを作り、クリックするとレポートを印刷したり・・・・ よろしくお願いします。

専門家に質問してみよう