• ベストアンサー

フォームを常に手前に表示する

環境:WindowsXP VB6 form1からform2を表示させるのですが、form2を常にform1よりも手前に表示させたいと思っています。 表示は手前ですが、コントロールを常に固定したいわけではありません。 モーダルモードで表示するとform1が使用できなくなってしまいます。 解決方法としてどのようにしたらよいでしょうか?

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

  • ベストアンサー
  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.2

親フォームを設定する方法 と Win32APIを使用する方法 があります。 前者の方が簡単です。が、結果に多少違いがあります。 【前者の 例&実行方法】 Form1 , Form2 があったとして、Form1からForm2を呼び出すときに Call Form2.Show(vbModeless,Me) としてやるだけです。 【後者の 例&実装方法】 ※SetWindowPos を使用します。詳細はMSDNなどを見られたほうが良いと思います。 Form1 に Commandボタン(Command1)を設置しそのボタン押下時にForm2が表示される場合。 Private Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, _ ByVal x As Long, ByVal y As Long, _ ByVal cx As Long, ByVal cy As Long, _ ByVal wFlags As Long) As Long Private Const SWP_NOMOVE = &H2 '位置を移動しない Private Const SWP_NOSIZE = &H1 'サイズを変更しない Private Const HWND_TOPMOST = -1 '最前面にする Private Sub Command1_Click() Form2.Show Call SetWindowPos(Form2.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) End Sub 上記方法で実装できます。 上記2通りの方法の実質的な違いは「APIを使用したほうは他のPGを含めた全ての前画面になりますが、親指定では該当PG内で前画面になるだけ」という違いがありますので用途に合ったほうをご利用ください。

freednia
質問者

お礼

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

その他の回答 (1)

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.1

show()メソッドを使用してますよね。 モードレスにするならば、引数指定しなければよいのではと思うのですが、 そういったことを質問されてるのではないのでしょうか? (試してみたら、モードレスでFrom1の手前に表示されます) 常に手前にひょうじするには、APIを使用します。こちらがサンプルです。 参照してみてください。 http://prog.everlasting-progress.com/vbtips/vbt001.htm

freednia
質問者

お礼

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

関連するQ&A

専門家に質問してみよう