Windows フォーム DataGridView コントロールでのセルのスタイルCell Styles in the Windows Forms DataGridView Control

DataGridView コントロール内の各セルは、テキスト形式、背景色、前景色、フォントなど、独自のスタイルを持つことができます。Each cell within the DataGridView control can have its own style, such as text format, background color, foreground color, and font. ただし、通常は、複数のセルで特定のスタイル特性を共有します。Typically, however, multiple cells will share particular style characteristics.

スタイルを共有するセルのグループには、特定の行または列内のすべてのセル、特定の値を含むすべてのセル、またはコントロール内のすべてのセルを含めることができます。Groups of cells that share styles may include all cells within particular rows or columns, all cells that contain particular values, or all cells in the control. これらのグループが重なっているため、各セルのスタイル情報が複数の場所から取得される場合があります。Because these groups overlap, each cell may get its styling information from more than one place. たとえば、DataGridView コントロール内のすべてのセルが同じフォントを使用するようにする必要がありますが、通貨の列のセルだけが通貨形式を使用するようにし、負の数値を持つ通貨セルのみが赤の前景色を使用するようにすることができます。For example, you may want every cell in a DataGridView control to use the same font, but only cells in currency columns to use currency format, and only currency cells with negative numbers to use a red foreground color.

DataGridViewCellStyle クラスThe DataGridViewCellStyle Class

DataGridViewCellStyle クラスには、visual スタイルに関連する次のプロパティが含まれています。The DataGridViewCellStyle class contains the following properties related to visual style:

このクラスには、書式設定に関連する次のプロパティも含まれています。This class also contains the following properties related to formatting:

これらのプロパティおよびその他のセルスタイルのプロパティの詳細については、以下の「関連項目」セクションに記載されている DataGridViewCellStyle リファレンスドキュメントとトピックを参照してください。For more information on these properties and other cell-style properties, see the DataGridViewCellStyle reference documentation and the topics listed in the See Also section below.

DataGridViewCellStyle オブジェクトの使用Using DataGridViewCellStyle Objects

DataGridViewCellStyle オブジェクトは、DataGridViewDataGridViewColumnDataGridViewRow、および DataGridViewCell クラスとその派生クラスのさまざまなプロパティから取得できます。You can retrieve DataGridViewCellStyle objects from various properties of the DataGridView, DataGridViewColumn, DataGridViewRow, and DataGridViewCell classes and their derived classes. これらのプロパティのいずれかがまだ設定されていない場合は、その値を取得すると、新しい DataGridViewCellStyle オブジェクトが作成されます。If one of these properties has not yet been set, retrieving its value will create a new DataGridViewCellStyle object. また、独自の DataGridViewCellStyle オブジェクトをインスタンス化して、これらのプロパティに割り当てることもできます。You can also instantiate your own DataGridViewCellStyle objects and assign them to these properties.

複数の DataGridView 要素間で DataGridViewCellStyle オブジェクトを共有することによって、スタイル情報の不要な重複を回避できます。You can avoid unnecessary duplication of style information by sharing DataGridViewCellStyle objects among multiple DataGridView elements. コントロール、列、および行の各レベルで設定されたスタイルによって、各レベルがセルレベルまでフィルター処理されるため、上記のレベルとは異なる各レベルのスタイルプロパティのみを設定することにより、スタイルの重複を回避することもできます。Because the styles set at the control, column, and row levels filter down through each level to the cell level, you can also avoid style duplication by setting only those style properties at each level that differ from the levels above. 詳細については、後の「スタイルの継承」セクションを参照してください。This is described in more detail in the Style Inheritance section that follows.

次の表に、DataGridViewCellStyle オブジェクトを取得または設定する主なプロパティを示します。The following table lists the primary properties that get or set DataGridViewCellStyle objects.

プロパティProperty クラスClasses [説明]Description
DefaultCellStyle DataGridViewDataGridViewColumnDataGridViewRow、および派生クラスDataGridView, DataGridViewColumn, DataGridViewRow, and derived classes コントロール全体 (ヘッダーセルを含む)、列、または行内のすべてのセルで使用される既定のスタイルを取得または設定します。Gets or sets default styles used by all cells in the entire control (including header cells), in a column, or in a row.
RowsDefaultCellStyle DataGridView コントロールのすべての行で使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by all rows in the control. これには、ヘッダーセルは含まれません。This does not include header cells.
AlternatingRowsDefaultCellStyle DataGridView コントロールの交互の行で使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by alternating rows in the control. 元帳に似た効果を作成するために使用します。Used to create a ledger-like effect.
RowHeadersDefaultCellStyle DataGridView コントロールの行ヘッダーによって使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by the control's row headers. Visual スタイルが有効になっている場合、現在のテーマによってオーバーライドされます。Overridden by the current theme if visual styles are enabled.
ColumnHeadersDefaultCellStyle DataGridView コントロールの列ヘッダーによって使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by the control's column headers. Visual スタイルが有効になっている場合、現在のテーマによってオーバーライドされます。Overridden by the current theme if visual styles are enabled.
Style DataGridViewCell と派生クラスDataGridViewCell and derived classes セルレベルで指定されたスタイルを取得または設定します。Gets or sets styles specified at the cell level. これらのスタイルは、上位レベルから継承されたスタイルよりも優先されます。These styles override those inherited from higher levels.
InheritedStyle DataGridViewCellDataGridViewRowDataGridViewColumn、および派生クラスDataGridViewCell, DataGridViewRow, DataGridViewColumn, and derived classes 上位レベルから継承されたスタイルを含む、セル、行、または列に現在適用されているすべてのスタイルを取得します。Gets all the styles currently applied to the cell, row, or column, including styles inherited from higher levels.

前述のように、プロパティが以前に設定されていない場合、スタイルプロパティの値を取得すると、新しい DataGridViewCellStyle オブジェクトが自動的にインスタンス化されます。As mentioned above, getting the value of a style property automatically instantiates a new DataGridViewCellStyle object if the property has not been previously set. これらのオブジェクトを不必要に作成しないようにするために、行クラスと列クラスには HasDefaultCellStyle のプロパティがあり、DefaultCellStyle プロパティが設定されているかどうかを確認できます。To avoid creating these objects unnecessarily, the row and column classes have a HasDefaultCellStyle property that you can check to determine whether the DefaultCellStyle property has been set. 同様に、セルクラスには、Style プロパティが設定されているかどうかを示す HasStyle プロパティがあります。Similarly, the cell classes have a HasStyle property that indicates whether the Style property has been set.

各スタイルプロパティには、DataGridView コントロールに対応するPropertyNameChanged イベントがあります。Each of the style properties has a corresponding PropertyNameChanged event on the DataGridView control. 行、列、およびセルの各プロパティの場合、イベントの名前は "Row"、"Column"、または "Cell" で始まります (たとえば、RowDefaultCellStyleChanged)。For row, column, and cell properties, the name of the event begins with "Row", "Column", or "Cell" (for example, RowDefaultCellStyleChanged). これらの各イベントは、対応するスタイルプロパティが別の DataGridViewCellStyle オブジェクトに設定されている場合に発生します。Each of these events occurs when the corresponding style property is set to a different DataGridViewCellStyle object. これらのイベントは、スタイルプロパティから DataGridViewCellStyle オブジェクトを取得し、そのプロパティ値を変更した場合には発生しません。These events do not occur when you retrieve a DataGridViewCellStyle object from a style property and modify its property values. セルスタイルオブジェクト自体への変更に応答するには、CellStyleContentChanged イベントを処理します。To respond to changes to the cell style objects themselves, handle the CellStyleContentChanged event.

スタイルの継承Style Inheritance

DataGridViewCell は、InheritedStyle プロパティから外観を取得します。Each DataGridViewCell gets its appearance from its InheritedStyle property. このプロパティによって返される DataGridViewCellStyle オブジェクトは、DataGridViewCellStyle型のプロパティの階層からその値を継承します。The DataGridViewCellStyle object returned by this property inherits its values from a hierarchy of properties of type DataGridViewCellStyle. これらのプロパティは、ヘッダー以外のセルの InheritedStyle が値を取得する順序で下に一覧表示されます。These properties are listed below in the order in which the InheritedStyle for non-header cells obtains its values.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (インデックス番号が奇数の行のセルのみ)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

行と列のヘッダーセルの場合、InheritedStyle プロパティは、指定された順序で、次のソースプロパティのリストの値によって設定されます。For row and column header cells, the InheritedStyle property is populated by values from the following list of source properties in the given order.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle または DataGridView.RowHeadersDefaultCellStyleDataGridView.ColumnHeadersDefaultCellStyle or DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

このプロセスを説明する図を次に示します。The following diagram illustrates this process.

DataGridViewCellStyle 型のプロパティProperties of type DataGridViewCellStyle

また、特定の行と列によって継承されたスタイルにアクセスすることもできます。You can also access the styles inherited by specific rows and columns. InheritedStyle プロパティは、次のプロパティからその値を継承します。The column InheritedStyle property inherits its values from the following properties.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Row InheritedStyle プロパティは、次のプロパティからその値を継承します。The row InheritedStyle property inherits its values from the following properties.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (インデックス番号が奇数の行のセルのみ)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

InheritedStyle プロパティによって返される DataGridViewCellStyle オブジェクトの各プロパティについて、プロパティ値は、対応するプロパティが DataGridViewCellStyle クラスの既定値以外の値に設定されている、適切なリストの最初のセルスタイルから取得されます。For each property in a DataGridViewCellStyle object returned by an InheritedStyle property, the property value is obtained from the first cell style in the appropriate list that has the corresponding property set to a value other than the DataGridViewCellStyle class defaults.

次の表は、例のセルの ForeColor プロパティ値が、その親列から継承される方法を示しています。The following table illustrates how the ForeColor property value for an example cell is inherited from its containing column.

DataGridViewCellStyle 型のプロパティProperty of type DataGridViewCellStyle 取得したオブジェクトの ForeColor 値の例Example ForeColor value for retrieved object
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

この場合、セルの行の Color.Red 値は、リストの最初の実際の値です。In this case, the Color.Red value from the cell's row is the first real value on the list. これは、セルの InheritedStyleForeColor プロパティ値になります。This becomes the ForeColor property value of the cell's InheritedStyle.

次の図は、さまざまな DataGridViewCellStyle プロパティがさまざまな場所から値を継承する方法を示しています。The following diagram illustrates how different DataGridViewCellStyle properties can inherit their values from different places.

DataGridView プロパティ-値の継承DataGridView property-value inheritance

スタイルの継承を利用することで、複数の場所で同じ情報を指定しなくても、コントロール全体に適したスタイルを提供できます。By taking advantage of style inheritance, you can provide appropriate styles for the entire control without having to specify the same information in multiple places.

説明のとおり、ヘッダーセルはスタイル継承に参加しますが、DataGridView コントロールの ColumnHeadersDefaultCellStyle および RowHeadersDefaultCellStyle プロパティによって返されるオブジェクトには、DefaultCellStyle プロパティによって返されるオブジェクトのプロパティ値をオーバーライドする初期プロパティ値があります。Although header cells participate in style inheritance as described, the objects returned by the ColumnHeadersDefaultCellStyle and RowHeadersDefaultCellStyle properties of the DataGridView control have initial property values that override the property values of the object returned by the DefaultCellStyle property. DefaultCellStyle プロパティによって返されるオブジェクトに対して設定されたプロパティを行ヘッダーと列ヘッダーに適用する場合は、ColumnHeadersDefaultCellStyle および RowHeadersDefaultCellStyle プロパティによって返されるオブジェクトの対応するプロパティを、DataGridViewCellStyle クラスに指定されている既定値に設定する必要があります。If you want the properties set for the object returned by the DefaultCellStyle property to apply to row and column headers, you must set the corresponding properties of the objects returned by the ColumnHeadersDefaultCellStyle and RowHeadersDefaultCellStyle properties to the defaults indicated for the DataGridViewCellStyle class.

注意

視覚スタイルが有効になっている場合、行ヘッダーと列ヘッダー (TopLeftHeaderCellを除く) は、現在のテーマによって自動的にスタイルが設定され、これらのプロパティによって指定されたスタイルはオーバーライドされます。If visual styles are enabled, the row and column headers (except for the TopLeftHeaderCell) are automatically styled by the current theme, overriding any styles specified by these properties.

DataGridViewButtonColumnDataGridViewImageColumn、および DataGridViewCheckBoxColumn 型は、列 DefaultCellStyle プロパティによって返されるオブジェクトの一部の値も初期化します。The DataGridViewButtonColumn, DataGridViewImageColumn, and DataGridViewCheckBoxColumn types also initialize some values of the object returned by the column DefaultCellStyle property. 詳細については、これらの型のリファレンスドキュメントを参照してください。For more information, see the reference documentation for these types.

動的なスタイル設定Setting Styles Dynamically

特定の値を持つセルのスタイルをカスタマイズするには、DataGridView.CellFormatting イベントのハンドラーを実装します。To customize the styles of cells with particular values, implement a handler for the DataGridView.CellFormatting event. このイベントのハンドラーは、DataGridViewCellFormattingEventArgs 型の引数を受け取ります。Handlers for this event receive an argument of the DataGridViewCellFormattingEventArgs type. このオブジェクトには、書式設定されているセルの値と、DataGridView コントロール内のその位置を確認できるプロパティが含まれています。This object contains properties that let you determine the value of the cell being formatted along with its location in the DataGridView control. このオブジェクトには、書式設定されるセルの InheritedStyle プロパティの値に初期化される CellStyle プロパティも含まれています。This object also contains a CellStyle property that is initialized to the value of the InheritedStyle property of the cell being formatted. セルスタイルのプロパティを変更して、セルの値と場所に適したスタイル情報を指定できます。You can modify the cell style properties to specify style information appropriate to the cell value and location.

注意

RowPrePaint イベントと RowPostPaint イベントは、イベントデータ内の DataGridViewCellStyle オブジェクトも受け取りますが、その場合は読み取り専用の行 InheritedStyle プロパティのコピーであるため、変更内容はコントロールに影響しません。The RowPrePaint and RowPostPaint events also receive a DataGridViewCellStyle object in the event data, but in their case, it is a copy of the row InheritedStyle property for read-only purposes, and changes to it do not affect the control.

また、DataGridView.CellMouseEnter イベントや CellMouseLeave イベントなどのイベントに応じて、個々のセルのスタイルを動的に変更することもできます。You can also dynamically modify the styles of individual cells in response to events such as the DataGridView.CellMouseEnter and CellMouseLeave events. たとえば、CellMouseEnter イベントのハンドラーでは、セルの背景色の現在の値 (セルの Style プロパティを通じて取得されます) を格納した後、マウスを置いたときにセルを強調表示する新しい色に設定できます。For example, in a handler for the CellMouseEnter event, you could store the current value of the cell background color (retrieved through the cell's Style property), then set it to a new color that will highlight the cell when the mouse hovers over it. CellMouseLeave イベントのハンドラーでは、背景色を元の値に戻すことができます。In a handler for the CellMouseLeave event, you can then restore the background color to the original value.

注意

特定のスタイル値が設定されているかどうかに関係なく、セルの Style プロパティに格納されている値をキャッシュすることが重要です。Caching the values stored in the cell's Style property is important regardless of whether a particular style value is set. スタイル設定を一時的に置き換える場合は、元の "設定なし" の状態に復元することで、そのセルが上位レベルからスタイル設定を継承するようになります。If you temporarily replace a style setting, restoring it to its original "not set" state ensures that the cell will go back to inheriting the style setting from a higher level. スタイルが継承されているかどうかに関係なく、セルに対して実際に有効なスタイルを決定する必要がある場合は、セルの InheritedStyle プロパティを使用します。If you need to determine the actual style in effect for a cell regardless of whether the style is inherited, use the cell's InheritedStyle property.

参照See also