忘れるのでメモ。
1 inch = 25.40 mm
1mm = 0.03937 inch
.NET MDI子フォーム(FormBoderStyle=None)を表示するときにちらつく
MDI親フォームからFormBorderStyle=Noneの子―フォームを開くとき
一瞬だけタイトルバーが表示されてしまいます。
現象を確認出来るコード
MDI親フォームでは開くメニューを用意し、Clickイベントで子―フォームを開きます。
開くボタンを連打すると子フォームのタイトルバーが一瞬表示されると思います。
この現象を防ぐために、子フォームのOnLoadをオーバーライドし下記のように記述します。
これでタイトルバーが一瞬表示される現象が発生しなくなるのですが
今度は子フォームを閉じるとき一瞬画面全体が上に移動してしまう現象が発生しちらつきますw
たぶんタイトルバーの高さ分だけ移動していると思われます。
こちらは回避方法がわかりません。
そこでMDI親フォームの開くボタンではフォームを開いてから、他のフォームを閉じることにし、閉じているところを隠しました。
根本的な解決ではありませんが・・・
一瞬だけタイトルバーが表示されてしまいます。
現象を確認出来るコード
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
登録:
コメント (Atom)
-
DataTableから重複を除くには と DataTableの集約計算を行う(Compute) を利用して、DataTableをグループ化し集計を行います。 以下のようなデータが入ったDataTableから、Field1とField2で重複を取り除き集計をおこないます。...
-
前回「 PLSQL SELECTの結果を取得する ~取得結果が1行の場合~ 」に続き 今回はSELECTの結果が複数行の場合です。 SELECTの結果が複数行の場合はカーソルを使用します。 カーソルとは SELECTの結果セットに対して、1行ずつデータを取り出し、順次...
-
datatableの集約計算を行うにはDataTable.Compute メソッドを使用します。 Dim As Object '最大値を求める value = datatable.Compute("Max(集計列名)", Nothing) ...