忘れるのでメモ。
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 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
登録:
投稿 (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) ...