C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■94216 / 3階層)  親フォームを最小化後に子フォームを開くには
□投稿者/ 魔界の仮面弁士 (2639回)-(2020/03/25(Wed) 15:15:36)
2020/03/25(Wed) 15:29:25 編集(投稿者)

No94215 (はる さん) に返信
>> MDI 子フォームの場合(MdiParent が設定されている)は無理ですね。
> 親フォーム(Form1)に、MenuStripコントロールを使ってメニューも作ってますので、これに当たるかと思います。

新規プロジェクトで、下記を試してみてください。

Public Class Form1
  Private FormA As Form
  Private FormB As Form
  Private FormC As Form
  Private FormD As Form
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    FormA = New Form() With {.Text = "A", .IsMdiContainer = True}
    FormB = New Form() With {.Text = "B", .MdiParent = FormA}
    FormC = New Form() With {.Text = "C", .TopLevel = False, .Parent = Me}
    FormD = New Form() With {.Text = "D"}

    'A や D は、Me の子フォームとして扱われます。
    'B や C は、子コントロールとして扱われます。
    FormA.Show(Me)
    FormB.Show()
    FormC.Show()
    FormD.Show(Me)
  End Sub
End Class


'(A) .IsMdiContainer が True であるフォーム
'(B) .MdiParent が Nothing 以外であるフォーム
'(C) .TopLevel が False であるフォーム
'(D) 上記いずれでも無いフォーム


A は MDI 親フォームと呼ばれることがあります。
B は MDI 子フォームと呼ばれることがあります。
D は SDI フォームと呼ばれることがあります。


A や D はトップレベルウィンドウ(.TopLevel = True)であるため、
親フォームにも子フォームにもなれます。


B や C はトップレベルウィンドウでは無い(.TopLevel = False)ため、
Label や ListBox などのような「コントロール」として振る舞います。
コントロールなので、他のウィンドウの上に載せないと表示できません。


たとえば FormC は、.Parent = Me としていますので、
Form1 の子コントロールとして振る舞っていますが、
.Parent = Button1 とすれば、Button1 の子コントロールになりますし
.Parent = Panel1 とすれば、Panel1 の子コントロールになります。


なお、.TopLevel = True なフォームの .Parent は常に Nothing です。
また、.MdiParent が Noting 以外なフォームの .Parent は常に MDIClient です。



> 対策としてはRadioButtonなどにすべきなのでしょうか?

MenuStrip や RadioButton などは、あまり関係ないと思います。

何故、「親フォームを最小化後に子フォームを開きたい」のかという
意図が分からないのですが、要件を満たすためには、
子フォームの TopLevel は True でなければならないため、
『MDI 子フォーム』との両立は不可能だということです。

親フォームの最小化を諦めるか……あるいは、
一時的に MDI から SDI に変更するなどの
見直しを行ってみては如何でしょう。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: 親フォームを最小化後に子フォームを開くには /はる →Re[4]: 親フォームを最小化後に子フォームを開くには /はる
 
上記関連ツリー

親フォームを最小化後に子フォームを開くには / はる (20/03/25(Wed) 11:39) #94208
Re[1]: 親フォームを最小化後に子フォームを開くには / 魔界の仮面弁士 (20/03/25(Wed) 12:37) #94213
  └ Re[2]: 親フォームを最小化後に子フォームを開くには / はる (20/03/25(Wed) 13:52) #94215
    └ 親フォームを最小化後に子フォームを開くには / 魔界の仮面弁士 (20/03/25(Wed) 15:15) #94216 ←Now
      └ Re[4]: 親フォームを最小化後に子フォームを開くには / はる (20/03/25(Wed) 22:13) #94223
        └ Re[5]: 親フォームを最小化後に子フォームを開くには / はる (20/03/26(Thu) 12:17) #94234 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信