もう少しユーザーコントロール側で必要な機能があるので。
それは「色」と「フォント」。
大体は親である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 件のコメント:
コメントを投稿