一瞬だけタイトルバーが表示されてしまいます。
現象を確認出来るコード
MDI親フォームでは開くメニューを用意し、Clickイベントで子―フォームを開きます。
Public Class FrmMdi
Private Sub 開くToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くToolStripMenuItem.Click
'開いているフォームをすべて閉じる
For Each f As Form In Me.MdiChildren
f.Close()
Next
'新しいフォームを開く
Dim frm As New FrmChild
frm.MdiParent = Me
frm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
frm.Dock = DockStyle.Fill
frm.Show()
End Sub
End Class
MDI子フォームは新規作成したフォームのままで特にコードはかきません。Public Class FrmChild End Class
開くボタンを連打すると子フォームのタイトルバーが一瞬表示されると思います。
この現象を防ぐために、子フォームのOnLoadをオーバーライドし下記のように記述します。
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
Me.FormBorderStyle = Me.FormBorderStyle
MyBase.OnLoad(e)
End Sub
これでタイトルバーが一瞬表示される現象が発生しなくなるのですが
今度は子フォームを閉じるとき一瞬画面全体が上に移動してしまう現象が発生しちらつきますw
たぶんタイトルバーの高さ分だけ移動していると思われます。
こちらは回避方法がわかりません。
そこでMDI親フォームの開くボタンではフォームを開いてから、他のフォームを閉じることにし、閉じているところを隠しました。
根本的な解決ではありませんが・・・
Private Sub 開くToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くToolStripMenuItem.Click
''開いているフォームをすべて閉じる
'For Each f As Form In Me.MdiChildren
' f.Close()
'Next
'新しいフォームを開く
Dim frm As New FrmChild
frm.MdiParent = Me
frm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
frm.Dock = DockStyle.Fill
frm.Show()
'開いているフォームをすべて閉じる
For Each f As Form In Me.MdiChildren
If f IsNot frm Then
f.Close()
End If
Next
End Sub
0 件のコメント:
コメントを投稿