2007年8月31日金曜日

伝票レイアウトセル(5) セル その1

ある程度編集コントロール側ができてきたので、今度はセル側の追加実装をはじめましょう。

セルクラス その2でちょっとだけ扱ったInitializeEditingControlメソッド。
こいつの中で行うことをちょっとだけ(w)説明。

渡されてくる引数についてはMSDNとかを見てほしい。
ここでやるべき重要なことってのはそれほど多くは無いね。

  • 利用される編集コントロールへ必要な値を設定する
  • 編集コントロールからユーザーコントロールへと値を展開するイベントを発生させる

の2点くらい。ロジックとしてはこんな感じかな。

''' <summary>セルの編集に使用されるコントロールを初期化します</summary>
Public Overrides Sub InitializeEditingControl( _
ByVal rowIndex As Integer, _
ByVal initialFormattedValue As Object, _
ByVal dataGridViewCellStyle As System.Windows.Forms.DataGridViewCellStyle)

MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)

Dim columnSubEditorEdit As MultiLayoutColumn _
= TryCast(DataGridView.Columns(ColumnIndex), MultiLayoutColumn)
If columnSubEditorEdit IsNot Nothing Then
_editorInstanceType = columnSubEditorEdit.EditorInstanceType
End If

Dim target As MultiLayoutEditingControl = TryCast(Me.DataGridView.EditingControl, MultiLayoutEditingControl)
If target Is Nothing Then Return
With target
'必要なプロパティの設定
.EditingControlDataGridView = Me.DataGridView
.EditingControlRowIndex = Me.RowIndex
.EditingControlValueChanged = False
'値を設定しコントロールのインスタンスを生成させる
.Values = TryCast(Me.Value, SubEditor.SubEditorValues)
.SetEditorInstance()
If .EditorInstance IsNot Nothing Then
'イベントの発生
.EditorInstance.OnConvertValuesToInterface()
End If
End With
End Sub

今回もまた、実際に利用しているロジックなので説明していない部分はあるけどスルーな方向でw
重要なのは、Dim target As MultiLayoutEditingControl ~の行から下。
セル側から編集コントロールへ、実際の編集に利用するユーザーコントロールの生成をお願いする必要があるわけだ。これをしないと編集状態になっても何も表示されないままなんだよね。IDataGridViewEditingControl側ではいつコントロールのインスタンスを生成すればよいのか、というのはつかめないのでInitializeEditingControlメソッド内部で呼び出してあげないといけないわけ。

次はいよいよ大物。Paintメソッドにとりかかろう~。

0 件のコメント:

コメントを投稿