ユーザー定義セルは、基本セルや組み込みのセル型を元に作成する任意のセル型です。ここでは、ユーザー定義セルの作成方法について説明します。
ユーザー定義セルの種類
ユーザー定義セルは、既存のセル型のクラスの派生クラスとして作成します。このため、作成する機能に応じて任意のセル型をベースとして選択できます。たとえば、次のようなシナリオがあります。
- 基本セル(Cell)を継承して表示や編集にかかわるすべての処理を実装する。
- ヘッダ型セル(HeaderCell)を継承してヘッダの表示をカスタマイズする。
- 列ヘッダ型セル(ColumnHeaderCell)を継承して列ヘッダの表示をカスタマイズする。
- ヘッダ型セル(HeaderCell)を継承して、ColumnHeaderCellとは別の任意の列ヘッダを作成する。
- 文字列型セル(TextBoxCell)を継承して、頻繁に使用するスタイルをセル型自体に組み込む。
- 文字列型セル(TextBoxCell)を継承して、セルの編集時に任意のコントロールを表示する(セル編集コントロール)。
- 既存のセル編集コントロールを継承して任意の処理を追加し、これを別のセル型に実装する。
|
ユーザー定義セルの作成
ユーザー定義セルはプロジェクトの形態(アプリケーション、クラスライブラリ)に関係なくコーディングで利用できます。旧バージョン5.0Jでは、ユーザー定義セルをあらかじめ別のアセンブリとしてビルドしなければツールボックスに登録できませんでしたが、12.0Jでは6.0J/7.0J/8.0J/10.0J/11.0Jと同様にWindowsフォームでUserControlを利用する場合と同じように、デバッグ中のプロジェクトでセルの定義からツールボックスへの登録までが可能です。
ここでは、ユーザー定義セルを作成し、テンプレート デザイナに配置するまでの方法を説明します。
以上でユーザー定義型セルの作成は完了です。ツールボックスからテンプレートにドラッグ&ドロップして配置し、組み込みのセル型と同じように利用できます。
ここでは、ユーザー定義セルを作成し、テンプレート デザイナに配置するまでの方法を説明します。
- Visual Studioを起動し、Windows フォーム アプリケーション プロジェクトを新規に作成する。(例:WindowsApplication1)
- Visual Studioのメニューから[プロジェクト]−[新しい項目の追加]を選択する。
- リストから「MultiRow 12.0 テンプレート」を選択し、[追加]ボタンをクリックする。(例:Template1.vb、Template1.cs)
- 再び Visual Studioのメニューから[プロジェクト]−[新しい項目の追加]を選択する。
- リストから「クラス」を選択し、プロジェクトにクラス ファイルを追加する。(例:MyTextBoxCell.vb、MyTextBoxCell.cs)
- クラス ファイルを開き、次のコードを追加する。
Imports System.Drawing Imports System.Windows.Forms Imports GrapeCity.Win.MultiRow Public Class MyTextBoxCell Inherits TextBoxCell Public Sub New() Me.Style.BackColor = Color.Azure End Sub End Class
using System.Drawing; using System.Windows.Forms; using GrapeCity.Win.MultiRow; public class MyTextBoxCell : TextBoxCell { public MyTextBoxCell() { base.Style.BackColor = Color.Azure; } }
- プロジェクトをビルドする。
- 追加したテンプレートを開き、テンプレート デザイナを表示する。
- Visual Studioのメニューから[表示]−[ツールボックス]を選択する。
- ツールボックスのアイテムの先頭に、ユーザー定義型セルが追加されていることを確認する。
以上でユーザー定義型セルの作成は完了です。ツールボックスからテンプレートにドラッグ&ドロップして配置し、組み込みのセル型と同じように利用できます。
カスタム プロパティの追加
実行時にGcMultiRowコントロールに追加されるセルは、GcMultiRow.Template.Row.Cellsプロパティのセルのインスタンスのクローンとなります。このため、ユーザー定義型セルを作成してカスタムプロパティを実装している場合、Cloneメソッドでプロパティの値を複製する必要があります。
たとえば、次のようなカスタムプロパティを実装している場合、
Clone メソッドのコーディングは次のようになります。
たとえば、次のようなカスタムプロパティを実装している場合、
Public Class MyTextBoxCell Inherits TextBoxCell Private _editingBackColor As Color Property EditingBackColor() As Color Get Return _editingBackColor End Get Set(ByVal value As Color) _editingBackColor = value End Set End Property End Class
public class MyTextBoxCell : TextBoxCell { private Color _editingBackColor; public Color EditingBackColor { get { return _editingBackColor; } set { _editingBackColor = value; } } }
Clone メソッドのコーディングは次のようになります。
Public Class MyTextBoxCell Inherits TextBoxCell Public Overrides Function Clone() As Object Dim myTextBoxCell As MyTextBoxCell = DirectCast(MyBase.Clone, MyTextBoxCell) myTextBoxCell._editingBackColor = Me.EditingBackColor Return myTextBoxCell End Function End Class
public class MyTextBoxCell : TextBoxCell { public override object Clone() { MyTextBoxCell myTextBoxCell = base.Clone() as MyTextBoxCell; myTextBoxCell._editingBackColor = this.EditingBackColor; return myTextBoxCell; } }
バージョン5.0J/6.0J/7.0J/8.0J/10.0J/11.0Jで作成したユーザー定義型セル
旧バージョン5.0J/6.0J/7.0J/8.0J/10.0J/11.0Jで作成したユーザー定義型セルを12.0Jで使用するには、旧バージョンの代わりに12.0Jを参照する環境でビルドし直す必要があります。旧バージョンおよび12.0Jから共通のアセンブリを参照することはできません。
使用例