■92276 |
Re[6]: MDI子ウインドウを最前面にする方法 |
□投稿者/ 魔界の仮面弁士 -(2019/09/06(Fri) 15:39:28)
| ■No92271 (とっちゃん さん) に返信 > なるほど。。。 > Activate が内部的に呼びだしてるのかもしれませんね。 > それだと、状況次第ではうまくいかないなどがありそうです。
Child1 = New Form() With {.MdiParent = Me, .Text = "Child1"} Child2 = New Form() With {.MdiParent = Me, .Text = "Child2"} Child3 = New Form() With {.MdiParent = Me, .Text = "Child3"}
のところの順番を入れ替えて
Child3 = New Form() With {.MdiParent = Me, .Text = "Child3"} Child1 = New Form() With {.MdiParent = Me, .Text = "Child1"} Child2 = New Form() With {.MdiParent = Me, .Text = "Child2"}
にした場合は、ActivateMdiChild でも 1 と 2 の切り替えが正しく行われました。 奇妙奇天烈摩訶不思議…
■No92265 (むん さん) に返信 > 「このメンバは、.NET Framework インフラストラクチャのサポートを目的としています。 > 独自に作成したコード内で直接使用することはできません。」とのことです。
.NET Framework 2.0 以降のリファレンスには見当たらないですね。 .NET Framework 1.x 当時の記述だったかな…? https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.activatemdichild
…と思ったら .NET のソースコードに、<internalonly/> が付与されていますね。 https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Form.cs,3096
> topmostをTrueにする方法も既に試していますが > https://www.papy.in/bbs/vb1/200507/05070056.html 同ログのオリジナルはここ。 http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200507/05070056.txt
> どのようにすれば良いでしょうか?
MDI 子フォームとせず、親フォーム上に直接配置するという手法があります。
ただし MDI 管理からは外れるため、MdiChildren プロパティや LayoutMdi メソッドとは連動しなくなりますし、 子フォームを最大化した場合の動作も異なることになります。
Partial Public Class Form1 Private Child1, Child2, Child3 As Form
Public Sub New() InitializeComponent()
IsMdiContainer = True Child1 = New Form() With {.MdiParent = Me, .Text = "Child1"} Child2 = New Form() With {.MdiParent = Me, .Text = "Child2"} Child3 = New Form() With {.TopLevel = False, .Text = "TopMost"} Controls.Add(Child3) Child1.Show() Child2.Show() Child3.Show()
' Controls.OfType(Of MdiClient)().FirstOrDefault()?.SendToBack() End Sub End Class |
|