PowerTools SPREAD for Windows Forms 8.0J
Style モデル

Styleモデルは、背景色、文字色、セル型といった外観に関する設定を保持します。Styleモデルを形成するクラスは以下のとおりです。

基本クラス BaseSheetStyleModelクラス
デフォルトクラス DefaultSheetStyleModelクラス
インターフェース ISheetStyleModelインタフェース

シートのStyleモデルを参照するには、SheetViewクラスのModelsプロパティでSheetView.DocumentModelsオブジェクトを参照し、Dataプロパティを使用します。

以下、Styleモデルについて説明します。

Styleモデルの設定とオブジェクト

Styleモデルに含まれる設定は次のとおりです。これらは、StyleInfoクラスのプロパティであり、セルの外観、およびスタイルに影響を与えます。

外観に関する設定は、次のオブジェクトで有効です。

各オブジェクトが、外観に関するプロパティを提供しています。例えば、CellクラスのBackColorプロパティを使用して、セルの背景色を設定できます。あるいは、StyleInfoクラスのBackColorプロパティを使用し、セルにStyleInfoオブジェクトを適用する方法もあります。

StyleInfoクラスの各プロパティへの設定は、ISheetStyleModelインタフェースを介してStyleモデルに格納されます。スタイルに関するプロパティは、セル、行全体(列インデックス -1)、列全体(行インデックス -1)、またはモデル全体(列および行インデックス -1)に設定できます。セルに直接設定されなかったプロパティは、行の設定から継承されます。行にも設定されていなかった場合には列の設定から継承され、列にも設定されていなかった場合はモデルの既定の設定が継承されます。既定の設定は、シート(SheetViewクラス)、列ヘッダ(ColumnHeaderクラス)、および行ヘッダ(RowHeaderクラス)のDefaultStyleプロパティにより、それぞれ提供されます。RowsおよびColumnsオブジェクトのDefaultプロパティで、またはRowsおよびColumnsオブジェクトのインデクサに-1を指定して(Rows[-1]およびColumns[-1])スタイルに関するプロパティを設定または取得すると、実際にはDefaultStyleプロパティを設定または取得していることになります。これは、RowsおよびColumnsオブジェクトがStyleモデルにアクセスする際に、行インデックス-1および列インデックス-1を使用するためです。したがって、行および列インデックスに-1を使用すると、既定のモデルが設定または取得の対象となります。

スタイルの継承順序については、「オブジェクトの親子関係」を参照してください。

以下は、スタイルに関連するクラスです。これらのクラスを使用して外観を設定することもできます。

複合(継承)スタイル

セルのスタイルの属性は、CellRowColumnSheetViewオブジェクト、および親のNamedStyleオブジェクトのスタイルの属性を複合して生成できます。

Styleモデルを使用するには、シートのStyleモデルのGetDirectInfoメソッド、およびSetDirectInfoメソッドを使用します。Styleモデルにおける「直接(Direct)」とは、「組み合わされていない」、または「継承されていない」という意味を表します。GetDirectInfoメソッドは、対象のセル、行、または列に直接、設定されたスタイルの属性を取得し、上位レベル(モデル全体など)で設定された属性は返しません。一方、GetCompositeInfoメソッドは、セル、行、または列の描画および編集に使用されるすべての設定(上位レベルから継承されたものも含む)を1つに「複合」したStyleInfoオブジェクトを返します。

名前付きスタイル

NamedStyleクラスを使用し、名前を指定してスタイルを定義できます。セル、行、または列のStyleNameプロパティにスタイルの名前を設定すると、Styleモデルのスタイルは、指定した名前のNamedStyleオブジェクトに置き換えられます。セル、行、または列のBackColor、Font、Border、ParentStyleNameプロパティなど、それまで設定されていたスタイル関連プロパティは、NamedStyleオブジェクトでの設定内容で、すべて上書きされます。

名前付きスタイルは、特定の要件に合わせてあらかじめスタイルを設定するために使用します。NamedStyleオブジェクトに親を設定する場合、あらかじめ親のNamedStyleオブジェクトを定義し、子のNamedStyleオブジェクトの生成時、コンストラクタの引数で親を指定します。
別の方法として、NamedStyleオブジェクトのParentプロパティを使用して、後から親を設定する方法もあります。これは、セル、行、または列のStyleNameプロパティ設定後に、ParentStyleNameプロパティを設定するのと同じです。

StyleNameを設定した後は、同じ名前付きスタイルを使用したすべてのセルは、同一のNamedStyleオブジェクトを共有することに注意してください。いずれかのセルでスタイルに変更を加えると、名前付きスタイルを共有する他のセルにも、同じ変更が適用されます。

サンプルコード

次のサンプルコードは、親子関係の2つのNamedStyleオブジェクトを作成します。1列目の背景色を青に設定し、1行目のセルを数値型に設定します。そして1行目および2行目の先頭セルに子のNamedStyleオブジェクトを設定します。
この結果、1列目のセルは青に設定されますが、最初の2つのセルは赤に設定されます。これは、親のNamedStyleから赤の背景色を継承しているためです。セルが列から継承した設定を、親のスタイルが上書きします。

C#
コードのコピー
NamedStyle test_parent = new NamedStyle("test_parent");
test_parent.BackColor = Color.Red;
fpSpread1.NamedStyles.Add(test_parent);
NamedStyle test = new NamedStyle("test", test_parent.Name);
test.ForeColor = Color.White;
fpSpread1.NamedStyles.Add(test);
//列の背景を青に設定
fpSpread1.Sheets[0].Columns[0].BackColor = Color.Blue;          
//1行目を数値型に設定
fpSpread1.Sheets[0].Rows[0].CellType = new NumberCellType();
//セルに名前付きスタイルを設定
fpSpread1.Sheets[0].Cells[0, 0].StyleName = "test";
fpSpread1.Sheets[0].Cells[1, 0].StyleName = "test";
Visual Basic
コードのコピー
Dim test_parent As New NamedStyle("test_parent")
test_parent.BackColor = Color.Red
FpSpread1.NamedStyles.Add(test_parent)
Dim test As New NamedStyle("test", test_parent.Name)
test.ForeColor = Color.White
FpSpread1.NamedStyles.Add(test)
'列の背景を青に設定
FpSpread1.Sheets(0).Columns(0).BackColor = Color.Blue
'1行目を数値型に設定
FpSpread1.Sheets(0).Rows(0).CellType = New NumberCellType()
'セルに名前付きスタイルを設定
FpSpread1.Sheets(0).Cells(0, 0).StyleName = "test"
FpSpread1.Sheets(0).Cells(1, 0).StyleName = "test"

なお、最初のセル (0,0) は数値型に設定されます。これは、親子いずれのNamedStyleオブジェクトでもセル型が設定されていないためです。1行目に設定されたセル型は、行のすべてのセルに適用されます。2番目のセル (1,0) のセル型は標準型です。このセル、行、または列のいずれに対してもセル型が設定されていないため、シートの既定のセル型である標準型が適用されます。

スタイル設定の継承については、「オブジェクトの親子関係」を参照してください。

書式オブジェクト

シートの既定の実装であるデフォルトクラスは、IParseFormatSupportインタフェースを実装しています。

StyleモデルがIParseFormatSupportインタフェースを実装していれば、標準型セルが編集されたときに書式オブジェクトが生成されます。書式オブジェクトにより、セルは入力時と同じ書式でデータを表示します。書式オブジェクトは、DateTimeFormatInfoまたはNumberFormatInfoオブジェクトで、データの書式が格納されています。コントロールをXMLに保存する際には、これらのオブジェクトを表す文字列が、書式情報として保存されます。

標準型セルは、文字列を日付時刻、または数値と解析し、書式オブジェクトおよび書式文字列を生成します。標準型セルではなく、テキスト型セルを使用する場合、ActiveX版のSPREADと同様に書式情報はStyleモデルに保存されず、入力されたデータは常にテキストとして処理されます。

関連トピック

 

 


© 2004-2015, GrapeCity inc. All rights reserved.