none
form1からwordを呼び出したとき,wordを前面に表示したい。 RRS feed

  • 質問

  • よろしくお願いします。

    画面に表示されているのは,Form1とwordの2つだけです。

    Me.TopMost = false としたらエディター画面でテストしても,思い通りに表示されていたのですが,
    インストーラをつくり,それで実行してみると,Form1が常に前面に表示されてしまいます。

    ア wordを前面に表示する
    イ  Form1が後ろに隠れるようにする などの方法がありましたらお教えください。


    zen73

    2012年4月30日 12:16

回答

  • AppActivate("Microsoft Word") で解決できました。

    アドバイスをいただきました皆さん,ありがとうございました。


    zen73

    • 回答としてマーク zen73 2012年5月1日 21:37
    2012年5月1日 21:37

すべての返信

  • 説明がおおざっぱすぎです。

    Form1 は System.Windows.Forms.Form のことですか?
    word は Microsoft Office Word のことですか?もしそうであるならバージョンはいくつですか?
    Me.TopMost = false の Me はどのオブジェクトのことですか?
    エディター画面でテストとは何のことですか?デバッグ実行のことですか?
    インストーラをつくり実行とは何のことですか?インストーラを作ってそれを実行してインストールされたものを実行するということですか?

    フォームが表示された時点で TopMost の値がどうなっているか確認してみてください。
    インストーラが最新であるか確認してみてください。

    2012年4月30日 16:56
  • 質問の内容を吟味してみるべきでした。お詫びします。

    プロジェクトを作成した環境
        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 Sub


    zen73

    2012年4月30日 20:47
  • ヘルプをきちんと読まれていますか?
    TopMost は True にすれば最前面に表示、False にすればその状態を解除するしか効能がありません。従って、自分のウィンドウを後ろに移す目的では使えません。

    アクティブにするためにはそういったメソッドが用意されているか、もしくは Win32API などでウィンドウをアクティブにする処理が必要になるでしょう。具体的な処理については検索などで情報を一度集めていただいた上で、何がわかって、何がわからないかを明確にしてください。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    2012年4月30日 23:52
    モデレータ
  • >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:17
    モデレータ
  • プロジェクトのコードとはなんですか?どのクラスのコードなのか明記してください。

    「(のつもり)」などと書かないでください。調べればわかることです。調べた上で正確な情報を明記してください。
    そもそも、どのクラスのコードなのかが先に書いてあれば自明なことです。

    ところで「常に前面に表示」をどういう意味で理解していますか?
    ちなみに「フォームが表示されたときに他のウィンドウより前に表示する・後ろに表示する」という意味ではありません。

    2012年5月1日 0:35
  • またもや説明がまずく申し訳ありません。

    TopMostを使うのではなく,SetForegroundWindow関数を使うのだということがわかってきました。
    この使い方を調べているところです。

    関連する質問をさせてください。
      ア セットアップして実行したとき,呼び出し元のFormの表示(前面・後面)が7とXPの2つの
    OSで異なるのはなぜでしょうか?
      イ 同じOS(7)でも,デバッグ実行したときとセットアップして実行したときで,Formの表示
    (前面・後面)が異なるのはなぜでしょうか?        
                      ↑ (コードを書いた後にF5キーを押して確かめることですが何とい
                               えばよいのかわかりません)


    zen73


    • 編集済み zen73 2012年5月1日 7:03
    2012年5月1日 7:00
  • イ についてだけですが、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日 7:30
  •   ア セットアップして実行したとき,呼び出し元のFormの表示(前面・後面)が7とXPの2つの
    OSで異なるのはなぜでしょうか?

    XP と Vista 以降で挙動が違ったと思います。
    (すみません。どう違うかまで覚えていないので明確には出せません)

    ↑ (コードを書いた後にF5キーを押して確かめることですが何といえばよいのかわかりません)

    デバッグ実行で十分通じます。
    逆に「セットアップして実行」という方に語弊があるように思います。単に Ctrl+F5 でも再現するのでは?

    Ctrl+F5 のことを「デバッグなしで実行」(メニューにもそう書いてある)と便宜上呼びます。
    また、exe ファイルを直接実行するとかでも再現するかもしれませんね。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    2012年5月1日 8:51
    モデレータ
  • AppActivate("Microsoft Word") で解決できました。

    アドバイスをいただきました皆さん,ありがとうございました。


    zen73

    • 回答としてマーク zen73 2012年5月1日 21:37
    2012年5月1日 21:37