好きなおでんの具材ドラフト会議しましょう

開発、コンパイル環境
VB.net 2008
ターゲットCPU:x86
Framework2.0
OS:Windows7

上記で作成したアプリで、
1、自作フォーム(Form1)をスタートアップオブジェクトに指定
2、参照設定に他社作成DLL(FormTest1含)を追加
3、Form1からFormTest1を起動

    ボタンクリックイベント
    Dim frm As New FormTest1
    frm.TopMost = True
    frm.Show()

おおむね上記のようなことを行っています。
問題は、自作アプリの起動後1回目の「FormTest1」起動だけ「Form1」の後ろに立ち上がります。
2回目以降は「Form1」の前面に立ち上がります。←これが希望しているの動作です。
実行PCはWindows7です。

散々調べたのですが解決策が見つかりませんでした。
この問題に解決策はあるのでしょうか?
どなたかご存じでしたらご教授願います。

A 回答 (3件)

> Dim frm As New FormTest1


をボタンクリックイベント内でなくパブリックにしておいてメイン等で定義し、イベントの中で
frm.TopMost = True
frm.Show()
を行うではどうでしょうか。
Newが完了する前にTopMostが指定されていて最初は間に合わないような気もします。

あるいは
frm.Show(Me)
ではどうなるでしょうか。
    • good
    • 0
この回答へのお礼

>frm.Show(Me)
オーナーフォーム指定の場合はたまにうまくいかない時があります。再現性はありません。わけがわかりませんが実際そうなのでなんともトホホです。

>Newが完了する前に・・・
これは初耳ですのでこちらで調べていこうと思います。

ありがとうございました。

お礼日時:2013/07/11 08:58

FormTest1が外部DLLであることが気になっております。

おそらくこちらはいじれないと推測して回答する必要があるのでしょうね…。

---
(1)frm.TopMost = True
(2)frm.Show()

(1)(2)を逆にするとどうなりますか?

(2)frm.Show()
(1)frm.TopMost = True

---

この回答への補足

ありがとうございます。

そうです「FormTest1」はいじれません。


>(1)(2)を逆にするとどうなりますか?

同じですね。

2回目は正常にうごきます。

補足日時:2013/07/10 12:13
    • good
    • 0

解決策になるかどうか判りませんが。


FormTest1のLoadに
Me.TopMost = true
を入れる。
あるいは下記が参考になるかも。
http://dobon.net/vb/dotnet/form/ownedform.html
モードレスのフォームが、あるフォームの背後に隠れないようにする
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報