2007年8月30日木曜日

伝票レイアウトセル(4) セル・ユーザーコントロール その3

もう少しユーザーコントロール側で必要な機能があるので。
それは「」と「フォント」。
大体は親であるDetaGridViewでのStyleを継承した表示にするんだけど、そのあたりに対応しておくと楽。

一つ一つコントロールに設定・・・はさすがに面倒なので、こんな感じにオーバーライド。

''' <summary>BackColorChangedイベントを発生させます</summary>
Protected Overrides Sub OnBackColorChanged(ByVal e As System.EventArgs)
    MyBase.OnBackColorChanged(e)
    For Each child As System.Windows.Forms.Control In Me.Controls
        child.BackColor = Me.BackColor
    Next
End Sub

''' <summary>ForeColorChangedイベントを発生させます</summary>
Protected Overrides Sub OnForeColorChanged(ByVal e As System.EventArgs)
    MyBase.OnForeColorChanged(e)
    For Each child As System.Windows.Forms.Control In Me.Controls
        child.ForeColor = Me.ForeColor
    Next
End Sub

''' <summary>FontChangedイベントを発生させます</summary>
Protected Overrides Sub OnFontChanged(ByVal e As System.EventArgs)
    MyBase.OnFontChanged(e)
    For Each child As System.Windows.Forms.Control In Me.Controls
        child.Font = Me.Font
    Next
End Sub

こんな感じで、OnBackColorChanged、OnForeColorChanged、OnFontChangedメソッドをそれぞれオーバーライドしておくと、これを継承して実装している限りは特に意識しなくてもユーザーコントロールに設定された色やフォントの情報が一気に適用されるね。それと、こういうときイベントで記述するかOn~メソッドのオーバーライドで記述するかって悩むけど、原則はメソッドのオーバーライドだと思う。結果同じにしても。

ちなみに実際にセルのStyleを適用させようとしてくるのは、DataGridViewCell.InitializeEditingControlメソッドとIDataGridViewEditingControl.ApplyCellStyleToEditingControlメソッドで行う。

0 件のコメント:

コメントを投稿