Formをアクティブにする

このQ&Aのポイント
  • バックグラウンドで実行中のプログラムでエラーが発生した場合に、サブフォームを表示しフォームをアクティブにする方法は?
  • 現在、SetWindowPos関数を使用してサブフォームのhwndを渡し、HWND_TOPMOSTに設定し、SetFocus関数を使用してアクティブにしているが、タイトルバーが点滅してアクティブにならない。
  • アクティブにしたいサブフォームを最前面に表示するためには、どのような方法があるか?
回答を見る
  • ベストアンサー

Formをアクティブにする

バックグラウンド(フォームは非表示にしている)で実行しているプログラムでエラーが発生した場合にサブフォームを表示しています。 このサブフォームを最前面に表示しフォームをアクティブにしたいのですがどのようにすればよろしいでしょうか?(このフォームにはテキストボックス等はなくラベルのみです。) 現在、SetWindowPosにてこのサブフォームのhwndを渡し、HWND_TOPMOSTにしサブフォームにSetFocusさせています。 しかし、実行されると最前面には来るのですがタイトルバーが点滅(?)した状態になりアクティブになりません。このフォームをクリックするとアクティブとなります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

SetForgroundWindowを使わないといけません また Win2000以降でこのAPIの仕様が変更になったため AttachThreadInputもあわせて使うようにしないと希望の動作にならないかと 1) 現在実行中のプロセスのスレッドIDを取得 GetForegroundWindow/GetWindowThreadProcessId 2) 自分のスレッドIDを取得 GetWindowThreadProcessId 3) AttachThreadInputの引数を自分のID、相手のID、TRUEを実行して接続する 4) SetForegroundWindowで自分自身を前面にする 5) AttachThreadInputの引数を自分のID、相手のID、FALSEを実行して接続を切る

kachimi
質問者

お礼

ありがとうございます。 試してみたいと思います。

関連するQ&A

  • VB.NET メッセージボックスが隠れてしまいます。

    VB.NETでIEを起動して、フォームの操作と連携して IEのページを自動で操作するプログラムを作っています。 IEでWEBページのリンクをクリックしてページを移動する ごとにURLをチェックして、設定に該当した場合は メッセージボックスを表示して、このページで良いですか? という確認をしたいのですが、メッセージボックスが アクティブにならずにタスクバーを押さないと表示されません。 リンクをクリックした後は SetWindowPos(IE.HWND, 1, 0, 0, 0, 0, &H1 Or &H2 Or &H10) を実行して、IEを後ろに消してフォームを出すことは出来たのですが、 IEのウィンドウのタスクバーが押された状態のままで メッセージボックスがアクティブな状態で最前面に出てくれません。 Me.Topmost = True でもフォームは出るのですが、 メッセージボックスはその後ろに隠れてしまいます。 メッセージボックスを最前面に出す方法があったら教えて頂きたいです。 よろしくお願い致します。

  • SetWindowPosについて

    こんにちは。以前のスレッドを何件か拝見して、私の事象がないようなので、投稿します。背面フォーム内の処理をタイマ割込みやループなどで処理しつつ、その前面でフォームを表示する場合、SetWindowPosのAPIが有効というところまでは分かっているのですが、私の場合、割り込みによるビットのON/OFFをしたいと思ってロジックを組んでいるのですが・・・ どうしてもモーダルフォームを前面表示したときと同じように、背面での処理が走ってくれません・・・ ロジックですが、前面フォームのイベントを sub Form_Load() SetWindowPos(frm_ctrl.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) end sub のように行っています。アンロード時にハンドルの設定は解除してあります。 タイマ割込みの処理が他者作成のため、目下処理が不明なのですが、こちらの方もAPIを使用しているかもしれません。 情報が少なくて恐縮ですが、この内容で解決の手掛かりとなる事をご教授頂けると幸いです。

  • サブフォームのサブフォームの値を参照

    Access2007で親フォームAの中にサブフォームBが入っていて、そのサブフォームBの中にサブフォームCが入っているとします。 この場合、親フォームAからサブフォームCの中のテキストボックスの内容等は参照できないのでしょうか? 一応試しに、親フォームから Me!サブフォームB.Form!サブフォームC.From!テキスト.SetFocus と、ソースに書いたのですが「実行エラー:438」が出てしまいます。 どうにかして参照できないでしょうか? ご存じの方がいらっしゃったらご教授お願いします。

  • ACCESS メインFからサブFの値を参照

    サブフォームで集計した値をメインフォームで演算値として使用したいのですができません。 サブフォームのフォームヘッダに集計値を入れるテキストボックスを配置し、メインフォームにサブフォームの集計値を参照するテキストボックスを配置しています。 ほんとうはイベントの実行で直接サブフォームの集計値を使った演算を行いたいのですが出来ないのでメインフォームにテキストボックスを作成しました。 サブフォームの集計値は表示しますが、その値を演算値として使用できないのです。試しにMsgboxでメインフォームのテキストボックスの値を表示させると何も表示しません。 なぜメインフォームのテキストボックスにサブフォームの値は表示できるのにその値を使用できないのでしょうか? 具体的には次の通りです。 <サブフォームに配置したテキストボックス>  名前        :テキスト16  コントロールソース:SUM([枚数〕)  書式        :数値 <メインフォームに配置したテキストボックス>  名前        :テキスト130  コントロールソース:[Foms]![メインフォーム名]![サブフォーム名].Form!テキスト16  書式        :数値 <イベント>   MSGBOX テキスト130       ※何も表示されません!

  • Access2007 ラベルの削除ができない。

    宜しくお願いします。 使用環境:WinVISTA ACCESS2007 初めてaccess2007でデータベースを作成し、混乱しています。 以前は(今もですが)ACCESS2002を使用しており、 バージョンの違いにより戸惑っています。 誰か教えてください。 3つのテーブルをリレーションシップし、 フォームを「その他のフォーム」→「フォームウィザード」で 作成しました。 ・メインフォーム ・サブフォーム ・サブフォーム ※ この流れでリレーションシップ。 今まで、2002でもこのパターンで作っいたのですが、 2007になり変わったところがあり、困惑しています。 画像をご覧頂くとわかるのですが、 まず、ウィザードでフォームを作成すると最初に付く「ラベル」が削除できません。 削除すると、そのテキストボックスごと削除されてしまいます。 サブフォームに関しては「ラベル」を削除するとサブフォーム自体が 削除されてしまいます。 今までは単体でも削除できましたし、私の「手ぐせ」ですが、 ラベルの中の文字を消せば削除できたので、違いに戸惑っています。 ■ 質問1 「ラベルのみ」の削除の仕方を教えてください。 ・・・・ また、ひとつのテキストボックスを伸ばしたりすると他のテキストボックスも 伸びるようになってしまいました。 またサブフォームのみ伸ばしたり縮めたりすると、メインフォームも一緒に 伸びたり、縮んだりします。 ■ 質問2 サブフォームやテキストボックス単体で伸縮できるようにすればよいのでしょうか? またいろいろ動かしている内に一つのサブフォームと一つのテキストボックス は単体で動くようになりました。 (これもラベルは削除できませんが・・) まったくもってわかりません・・。 切り離し方など、誰かお助けください。 宜しくお願いします。

  • Accessのサブフォームから値を参照する方法について

    いつも拝見させて頂いております。 現在、Access97のフォームに以下のようなコントロールを配置しています。 1.フォームにサブフォームAを配置  1-1.サブフォームAにテキストボックスAを配置(入力用) 2.フォームにサブフォームBを配置  2-1.サブフォームBにテキストボックスBを配置(表示用) ※フォームは一つです。 <実現したい事> サブフォームA内のテキストボックスAの値をサブフォームB内の テキストボックスBに表示したいのですが、なかなかうまくいきません。 サブフォームA内のテキストボックスAの値を変更するとサブフォームB内の テキストボックスBも変更するようにしたいので、テキストボックスBの ControlSourceに[Form]![フォーム]![サブフォームA].[Form]![テキストボックスA] としましたが実現できませんでした。 どのような方法をとれば実現できるでしょうか? 宜しくお願いします。

  • ACCESS フォーム、クエリの最前面表示について

    ACCESS フォーム、クエリの最前面表示について ACCESS2007でメインフォーム、サブフォームを作成し、各フォームはポップアップを有効にしているので、実行すると最前面に表示されますが、サブフォームから開くクエリが最背面に表示されてしまい、いちいちフォームを最小化なり、閉じたりしています。 クエリを最前面に表示させるにはどうしたらいいのでしょうか?

  • ACCESSフォームのテキストボックスで指定と違うフォントで表示される

    Windows2000+ACCESS2000です。 ACCESSのフォームでテキストボックスのフォントを「MSゴシック」に設定しているにもかかわらず、実行すると「MSPゴシック」として表示されてしまいます。 このフォームは別のフォームのサブフォームなのですが、サブフォームを単体で実行しても、メインフォーム内のサブフォームとして実行しても、「MSPゴシック」で表示されてしまいます。 このときメインフォーム内で「MSゴシック」に設定しているところはちゃんと「MSゴシック」で表示されています。 原因と対処方法がわかる方、いらっしゃいますでしょうか。

  • 「Form_フォーム1.テキスト1.Value = "" 」がうまくいかない。

    VBAについての質問です。(オフィス2003) フォーム1にテキストボックス1を作成しました。 Module1に Sub test() If Form_フォーム1.テキスト1.Value = "" Then MsgBox "空白です" End If End Sub とコードを書き、テキストボックス1を空白の状態でtestを実行しても何も起こりません。 F8で一行づつ実行してみてみたら Form_フォーム1.テキスト1.Valueのところにカーソルを当てると Form_フォーム1.テキスト1.Value=Nullとなります。 どうすればテキストボックス1が空白なら「空白です」と表示させることが可能でしょうか? よろしくお願いします。

  • Accessメインサブフォームにて・・・

    Accessのサブフォームで、入力するためのフォームと、 実際にメインフォームの中で表示させる時のサブフォームの表示を 変えたいのですが・・・。 (1)ボタンをクリックして、入力するためのサブフォームを表示させる。  これは帳票形式で、テキストボックスの罫線が表示されているよう  にします。 (2)入力し終わったら、メインフォームに戻る。  こちらで表示されるサブフォームは、テキストボックスの罫線が表示  されていないようにする。 上記のようなことはできるでしょうか?よろしくお願いします。  

専門家に質問してみよう