2008年12月10日水曜日

GrapeCityTool MultiRow5.0J ユーザ定義セル

MultiRow5.0j 数値型セルぐらいは用意して欲しかったなぁ
それともInputManが抱き合わせで売れるようにワザと用意しないのかい?

InputManを買うお金もないので、数値型セルを自分で作りました。


数値型セルの要件


・マイナス値は赤字で表示。
・入力は数値のみ。貼り付けも数値のみ。
・最小値と最大値の範囲でのみ入力可。
・編集状態が終了したタイミングで3桁ごとにカンマ区切りにする。
・小数点以下桁数の設定。


準備


・ユーザー定義セルをツールボックスに登録するには、MultiRow for Windows Forms 5.0J Service Pack 1 (5.0.2008.0930)が必要です。
Sp1を適用していない場合は適用します。

・ヘルプの以下の箇所を読みましょう。
[製品の概要]
-[Service Pack 1 の変更点]
-[デザイナのツールボックスのカスタマイズ]
-[ユーザー定義セル]
-[デザイナのツールボックスに登録する]



ユーザ定義セルを作成するクラスライブラリの作成


以下に記述したカスタム編集エディタクラスとカスタムセルクラスは、クラスライブラリとして作成しますので
まずは新規プロジェクトでクラスライブラリを作成します。


数値型編集エディタクラスの作成


エディタクラスはカスタムコントロールの作成要領とほとんど同じです。
数値型編集エディタはGrapecity.Win.MultiRow.TextBoxEditingControlを継承して作りました。
「数値型セルの要件」で必要なプロパティなどを実装します。
KeyPressなどで数字以外の文字を弾く処理を記述します。
ペーストで数字以外を貼り付けできないよう処理を記述します。


数値型セルクラスの作成


数値型編集エディタクラスを編集エディタにもつ、数値型セルクラスです。

・Grapecity.Win.MultiRow.TextBoxCellを継承します。

・EditTypeプロパティで数値型編集エディタクラスのTypeオブジェクトを返します。
Public Overrides ReadOnly Property EditType() As System.Type
Get
Return GetType(CustomNemericTextBoxEditingControl)
End Get
End Property


・数値型編集エディタクラスに作成したカスタムプロパティは、数値型セルにも同じプロパティを用意します。

・セルのCloneメソッドでカスタムプロパティの値を複製します。
よくある質問:ID11562より
実行時に GcMultiRow コントロールに追加されるセルは、GcMultiRow.Template.Row.Cells プロパティのセルのインスタンスのクローンとなります。
このため、ユーザー定義型セルを作成してカスタムプロパティを実装している場合、Clone メソッドでプロパティの値を複製する必要があります。
Public Overrides Function Clone() As Object
Dim cell As CustomNumericTextBoxCell 
cell = DirectCast(MyBase.Clone, CustomNumericTextBoxCell )
cell.CustomProperty1 = Me._CustomProperty1 
Return cell
End Function


・InitializeEditingControlメソッドでエディタに設定する値やプロパティを設定します。
InitializeEditingControlメソッドはセルが編集状態になる場合に発生します。
このメソッドの引数ByVal formattedValue As Objectがエディタの値になります。
この値はセルに表示されている書式変換後の値なので、この値よりカンマ区切りなどの書式を除去したり、エディタに表示する値を加工したりします。
またここでセルに設定されているカスタムプロパティの値を、エディタの同プロパティに設定します。

・OnCellFormattingメソッドでセルに表示する値の書式を設定します。
OnCellFormattingメソッドは表示用の文字列に変換される際に発生します。
このメソッドの引数ByVal e As GrapeCity.Win.MultiRow.CellFormattingEventArgsのValueプロパティの値が、セルに表示される値になります。
この値に対して、カンマ区切りなどの書式設定やマイナス値の前景色の設定を行います。


数値型セルをツールボックスに登録する


・数値型セルを含むdllを「マイ ドキュメント\GrapeCity MultiRow\MultiRow 5.0 CellTypes」に配置します。
Windows Vista/2008 の場合、
C:\Users\<ユーザー名>\Documents\GrapeCity MultiRow\MultiRow 5.0 CellTypes
Windows 2000/XP/2003 の場合、
C:\Documents and Settings\<ユーザー名>\My Documents\GrapeCity MultiRow\MultiRow 5.0 CellTypes

・Visual Studio でプロジェクトに「MultiRow 5.0 テンプレート」を追加するか、または既存のテンプレートを開いてデザイナを表示する。
デザイナのツールボックスを右クリックし、「ユーザー定義セルを再読み込み」を実行する。
ツールボックスの「ユーザー定義セル」グループにユーザー定義セルが表示されます。


ユーザ定義セルのdll参照


ツールボックスに表示されたユーザ定義セルをドラッグ&ドロップでテンプレートを作成しビルドすると、
bin/debuまたはbin/releaseにユーザ定期セルdllがコピーされます。
もしdllに変更があったら、プロジェクトのbin配下のdllを手動で変更しなければなりません。
それは面倒なので、参照設定でユーザ定義セルdllの参照先を変更しておくことをお勧めします。


以上 間違っていたらご指摘ください。


MultiRow5.0Jの調査はまだまだ山積みです。
使用感としてはVer4.0より確実に面倒が増えたと感じます。
慣れとかではなく、あきらかにコード量が増えました。
Ver4.0はカスタムセルの作成など複雑なことはできなかったけれど、その分簡単でした。
Ver5.0では複雑なことができるようになったけれど、簡単だったことまでが複雑になった感じがします。

ですがその前に…
VerUpするなら互換性をキープしてほしい!!
まじで勘弁して欲しい。
あとヘルプ。
ユーザ定義セルをサポートしてるんだからInitializeEditingControlメソッドとかちゃんとヘルプに載せて下さい。

余談ですが
GcMultiRowクラス、その他編集エディタを使用するセルはすべてラップクラスを用意することをお勧めします。
出たばっかりですからね。やっぱ色々と細かい問題があります。

2 件のコメント:

舞 さんのコメント...

>MultiRow5.0j 数値型セルぐらいは用意して欲しかったなぁ
>それともInputManが抱き合わせで売れるようにワザと用意しないのかい?

全く同意ですね。
バージョンUPして値段もUPしたのに、機能は著しく下がった。
前バージョンで標準サポートしていた機能が
別売りで更に値段も高いとは・・・。
GrapeCity、やってくれますね。

>InputManを買うお金もないので、数値型セルを自分で作りました。

やっぱりそうなりますよね。自分も作成中です。
なかなか情報がなくて、Cloneの部分等、
だいぶ参考にさせて頂きましたm(__)m

これからも頑張ってください!。

yan さんのコメント...

舞さん
はじめてのコメントです!!
うれしいです 。・゚・(ノ∀`)・゚・。

MultiRowには苦労しますね。
少しでも参考になってよかったです。