一瞬だけタイトルバーが表示されてしまいます。
現象を確認出来るコード
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 ClassMDI子フォームは新規作成したフォームのままで特にコードはかきません。
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 件のコメント:
コメントを投稿