- PR -

DataGridViewTextBoxColumnに追加したプロパティの値が保存されない

投稿者投稿内容
kai
会議室デビュー日: 2006/10/10
投稿数: 5
投稿日時: 2006-10-13 11:49
返信ありがとうございます。

>>というように、MyTextBoxCellクラスにCloneメソッドを、MyTextBoxColumnクラスに
>>CellTemplateプロパティのオーバーライドをやっていました。デザイン時には、
>>〜Columnクラスのプロパティは内部的に〜Cellクラスのプロパティをアクセスする
>>ような感じですね・・・。
ちょっと時間が取れずに試せていないのですが、MyTextBoxCellのクローンになるのですね。またご報告します。

当面は色を個別に変更して使用することもないのですし、コードで指定すれば回避できるのですが、デザイン時に表示される画面で保持できればと思ったものですから。ありがとうございます。
kai
会議室デビュー日: 2006/10/10
投稿数: 5
投稿日時: 2006-10-17 21:06
悩みましたがようやく思うような動作をしてくれるようになりました。アドバイスありがとうございました。

--------------------------
Imports System.ComponentModel

Public Class MyTextBoxColumn
 Inherits System.Windows.Forms.DataGridViewTextBoxColumn

 Private _GotFocusBackColor As Color   'フォーカス取得時の背景色
 Private _LostFocusBackColor As Color  'フォーカス喪失時の背景色

 <Category("表示")> _
 <Description("フォーカス取得時の背景色を設定します。")> _
 Public Property GotFocusBackColor() As Color
  Get
   Return DirectCast(MyBase.CellTemplate, MyTextBoxCell).GotFocusBackColor
  End Get
  Set(ByVal value As Color)
   DirectCast(MyBase.CellTemplate, MyTextBoxCell).GotFocusBackColor = value
  End Set
 End Property

 Public Sub New()
  InitializeComponent() '呼び出しの後で初期化を追加します。

  Me.CellTemplate = New MyTextBoxCell
 End Sub

 Private Shadows Property CellTemplate() As MyTextBoxCell
  Get
   Return MyBase.CellTemplate
  End Get
  Set(ByVal value As MyTextBoxCell)
   MyBase.CellTemplate = value
  End Set
 End Property
End Class

Public Class MyTextBoxCell
 Inherits System.Windows.Forms.DataGridViewTextBoxCell

 Private _GotFocusBackColor As Color ' = Color.LightYellow   'フォーカス取得時の背景色
 Private _LostFocusBackColor As Color  'フォーカス喪失時の背景色

 <Category("表示")> _
 <Description("フォーカス取得時の背景色を設定します。")> _
 Public Property GotFocusBackColor() As Color
  Get
   Return _GotFocusBackColor
  End Get
  Set(ByVal value As Color)
   _GotFocusBackColor = value
  End Set
 End Property

 Public Overrides Function Clone() As Object
  Dim obj As MyTextBoxCell
  obj = MyBase.Clone()
  obj.GotFocusBackColor = _GotFocusBackColor
  Return obj
 End Function

 Public Sub New()
  Try
   _GotFocusBackColor = Color.LightYellow
  Catch
  End Try
 End Sub

 Protected Overrides Sub OnEnter(ByVal rowIndex As Integer, ByVal throughMouseClick As Boolean)
  Dim col As MyTextBoxColumn
  col = Me.OwningColumn

  'ZestTextBoxColumnの情報を参照する
  If Not col Is Nothing Then
   _GotFocusBackColor = DirectCast(col.CellTemplate, MyTextBoxCell).GotFocusBackColor
  End If

  _LostFocusBackColor = Style.BackColor
  Style.BackColor = _GotFocusBackColor
 End Sub

 Protected Overrides Sub OnLeave(ByVal rowIndex As Integer, ByVal throughMouseClick As Boolean)
  Style.BackColor = _LostFocusBackColor
 End Sub
End Class

スキルアップ/キャリアアップ(JOB@IT)