form1からwordを呼び出したとき,wordを前面に表示したい。
-
2012年4月30日 12:16
よろしくお願いします。
画面に表示されているのは,Form1とwordの2つだけです。
Me.TopMost = false としたらエディター画面でテストしても,思い通りに表示されていたのですが,
インストーラをつくり,それで実行してみると,Form1が常に前面に表示されてしまいます。ア wordを前面に表示する
イ Form1が後ろに隠れるようにする などの方法がありましたらお教えください。zen73
すべての返信
-
2012年4月30日 16:56
説明がおおざっぱすぎです。
Form1 は System.Windows.Forms.Form のことですか?
word は Microsoft Office Word のことですか?もしそうであるならバージョンはいくつですか?
Me.TopMost = false の Me はどのオブジェクトのことですか?
エディター画面でテストとは何のことですか?デバッグ実行のことですか?
インストーラをつくり実行とは何のことですか?インストーラを作ってそれを実行してインストールされたものを実行するということですか?
フォームが表示された時点で TopMost の値がどうなっているか確認してみてください。
インストーラが最新であるか確認してみてください。 -
2012年4月30日 20:47
質問の内容を吟味してみるべきでした。お詫びします。
プロジェクトを作成した環境
Visual studio 2008 Windows7(64ビット) Microsoft Office Word2010
作成したプロジェクトの内容
form上のボタンをクリックしたときwordを呼び出す
プロジェクトをセットアップした環境
ア Windows7(64ビット) Microsoft Office Word2010
イ WindowsXP Microsoft Office Word2010
セットアップしたプロジェクトを実行したとき,
アでは,Formが前面に,wordが背面に表示されます。
イでは,wordが前面に,Formが背面に表示されます。
《お聞きしたいこと》
アでもイのように,wordが前面に表示されるようにする方法はないでしょうか?プロジェクトのコード
Private Sub ButtonClick(ByVal sender As Object, ByVal e As System.EventArgs)
Dim strFilename As String
Dim strPath1 As String strPath1 = "D:\宛先印刷\封筒\"
strFilename = "B5用封筒.docx"
Dim wdApp As Object
wdApp = CreateObject("Word.Application")
With wdApp
'word文書を開く
.visible = True
.documents.open(strPath1 & strFilename)
'MeはForm1(のつもり)
Me.TopMost = False
End With
End Subzen73
-
2012年4月30日 23:52モデレータ
ヘルプをきちんと読まれていますか?
TopMost は True にすれば最前面に表示、False にすればその状態を解除するしか効能がありません。従って、自分のウィンドウを後ろに移す目的では使えません。アクティブにするためにはそういったメソッドが用意されているか、もしくは Win32API などでウィンドウをアクティブにする処理が必要になるでしょう。具体的な処理については検索などで情報を一度集めていただいた上で、何がわかって、何がわからないかを明確にしてください。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
-
2012年5月1日 0:17モデレータ
>Me.TopMost = False
最後にMe.TopMost = False を実行しているということは、これより前ではMe.TopMost = Trueになっているのでしょうか?
であれば、あまり関係ないかもしれませんが、Wordを開く前にMe.TopMost = False にすると状況が変わるかもしれません。★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
2012年5月1日 0:35
プロジェクトのコードとはなんですか?どのクラスのコードなのか明記してください。
「(のつもり)」などと書かないでください。調べればわかることです。調べた上で正確な情報を明記してください。
そもそも、どのクラスのコードなのかが先に書いてあれば自明なことです。ところで「常に前面に表示」をどういう意味で理解していますか?
ちなみに「フォームが表示されたときに他のウィンドウより前に表示する・後ろに表示する」という意味ではありません。 -
2012年5月1日 7:00
またもや説明がまずく申し訳ありません。
TopMostを使うのではなく,SetForegroundWindow関数を使うのだということがわかってきました。
この使い方を調べているところです。関連する質問をさせてください。
ア セットアップして実行したとき,呼び出し元のFormの表示(前面・後面)が7とXPの2つの
OSで異なるのはなぜでしょうか?
イ 同じOS(7)でも,デバッグ実行したときとセットアップして実行したときで,Formの表示
(前面・後面)が異なるのはなぜでしょうか?
↑ (コードを書いた後にF5キーを押して確かめることですが何とい
えばよいのかわかりません)
zen73
- 編集済み zen73 2012年5月1日 7:03
-
2012年5月1日 7:30イ についてだけですが、SetForegroundWindow はデバッグ実行中だと動きが異なります。このことが関係しているのではないでしょうか。
次の URL の Remarks に説明があります。
SetForegroundWindow function (Windows)
http://msdn.microsoft.com/ja-jp/library/ms633539(v=VS.85)
日本語の解説もなくはないのですが、ちょっと意味が分かりにくいので、英語と合わせてお読みください。
SetForegroundWindow 関数
http://msdn.microsoft.com/ja-jp/library/cc411039.aspx -
2012年5月1日 8:51モデレータ
ア セットアップして実行したとき,呼び出し元のFormの表示(前面・後面)が7とXPの2つの
OSで異なるのはなぜでしょうか?XP と Vista 以降で挙動が違ったと思います。
(すみません。どう違うかまで覚えていないので明確には出せません)↑ (コードを書いた後にF5キーを押して確かめることですが何といえばよいのかわかりません)
デバッグ実行で十分通じます。
逆に「セットアップして実行」という方に語弊があるように思います。単に Ctrl+F5 でも再現するのでは?Ctrl+F5 のことを「デバッグなしで実行」(メニューにもそう書いてある)と便宜上呼びます。
また、exe ファイルを直接実行するとかでも再現するかもしれませんね。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
- 編集済み AzuleanMVP, Moderator 2012年5月1日 8:51
-
2012年5月1日 21:37
AppActivate("Microsoft Word") で解決できました。
アドバイスをいただきました皆さん,ありがとうございました。
zen73
- 回答としてマーク zen73 2012年5月1日 21:37

