人気ブログランキング | 話題のタグを見る
(.Net)Control.Reset()メソッドは使えるか?
現在、フォームの拡大Verを作っており、拡大設定にすると、すべてのコントロールのサイズ、フォントを大きくし、小設定にすると通常サイズに戻す部分を作っています。

で、フォントを元に戻すという部分ですが、MSDNのコントロールのリファレンス見てると面白そうなメソッドがありました。
Control.ResetFont()というメソッドです。
Controlを継承しているTextBoxやLabelとかでももちろん使えます。

が、なぜか下記のSSのようにインテリセンスに出てきません。
(.Net)Control.Reset()メソッドは使えるか?_e0091163_13285068.jpg


MSDNでTextBox.ResetFont()のリファレンスをみると、Control.RestFont()に飛ぶのですが、「このクラスでは、このメソッドは使用されません。 」と表示されてしまいます。

このResetFont()は「Font プロパティを既定値にリセット」するものだそうです。
じゃあ、規定値ってどの値やねん!と思って試してみると、どうやら下記の値みたいです。
[Font: Name=MS UI Gothic, Size=9, Units=3, GdiCharSet=128, GdiVerticalFont=False]

GroupBoxにフォントを設定すると、そのGroupBox上の他のコントロール(規定値にしていると)のフォントも自動的に引き継がれると思います。
ということで、試してみました。

まずデザイナで下記のように設定します。
GroupBox1のフォントはすべて規定値。
GroupBox2 , Label4 , TextBox4 のフォントを変更してます。
(.Net)Control.Reset()メソッドは使えるか?_e0091163_1329985.jpg


まず下記のようなソースだとします。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'GroupBxoとその中にある、フォントデフォルトの子コントロールのフォントも自動的に変更される。
Me.GroupBox1.Font = New System.Drawing.Font("MS ゴシック", 15.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
Me.GroupBox2.Font = Me.GroupBox1.Font
'子コントロールを個別に設定している場合は、GroupBoxのフォントに依存しないため、個別に設定しないといけない
Me.TextBox4.Font = Me.GroupBox1.Font
Me.Label4.Font = Me.TextBox4.Font
End Sub
 
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'GroupBoxとその中になる、フォントがデフォルトの子コントロールのフォントをリセット(MS UI Gothic, 9pt)にする
Me.GroupBox1.ResetFont()
Me.GroupBox2.ResetFont()
 
'↓これをするとMS UI Gothic, 9ptになってしまう。
Me.TextBox4.ResetFont()
Me.Label4.ResetFont()
End Sub
End Class

Label4 , TextBox4 はデザイナの段階で意図的にフォントを設定しているため、GroupBoxのフォントの設定が反映されません。それで、個別に設定する必要があります。
この状態で大ボタンを押すと下記のようにGroupBoxに設定したフォントになります。
(.Net)Control.Reset()メソッドは使えるか?_e0091163_13303170.jpg


小ボタンを押すと、すべてMS UI ゴシックの9ptになります。
(.Net)Control.Reset()メソッドは使えるか?_e0091163_13325593.jpg


で、Label4 , TextBox4 を元(デザイナで設定した値)に戻すには下記のソースのように一旦退避して戻すという手順になります。
Public Class Form1
Private m_bkFont As New List(Of Font)
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'GroupBxoとその中にある、フォントデフォルトの子コントロールのフォントも自動的に変更される。
Me.GroupBox1.Font = New System.Drawing.Font("MS ゴシック", 15.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
Me.GroupBox2.Font = Me.GroupBox1.Font
 
'子コントロールを個別に設定している場合は、GroupBoxのフォントに依存しないため、個別に設定しないといけない
Me.TextBox4.Font = Me.GroupBox1.Font
Me.Label4.Font = Me.TextBox4.Font
End Sub
 
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'GroupBoxとその中になる、フォントがデフォルトの子コントロールのフォントをリセット(MS UI Gothic, 9pt)にする
Me.GroupBox1.ResetFont()
Me.GroupBox2.ResetFont()
 
'↓これをするとMS UI Gothic, 9ptになってしまう。
'Me.TextBox4.ResetFont()
'Me.Label4.ResetFont()
''そのため、退避しておいたフォントの設定を元に戻す
Me.TextBox4.Font = m_bkFont(0)
Me.Label4.Font = m_bkFont(1)
End Sub
 
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'一旦、今のフォントをメンバ変数に退避しておき、新フォントを割りあてる
Me.m_bkFont.Add(Me.TextBox4.Font)
Me.m_bkFont.Add(Me.Label4.Font)
End Sub
End Class

このソースで小ボタンをおすとこうなります。
(.Net)Control.Reset()メソッドは使えるか?_e0091163_1331678.jpg


ちなみに、フォーム上のコントロール数が多い場合、この設定したフォントをメンバ変数に退避しておく方法だと、反映に非常に時間がかかるっぽいです。
RestFont()は非常に速いんですがね。。。

また、フォーム自体のフォントを変更するとフォームサイズも変わってしまいます。
要注意ですね。

まあ、MS UI ゴシック 9ptに戻す時に RestFont() は使えるっぽいですね。

参考:Control..::.ResetFont メソッド
by jehoshaphat | 2008-12-20 13:33 | .Net開発


<< (VB.Net)ハンドルされな... (VB.Net)ADO.Net... >>