DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewのセルにツールヒント(ToolTip)を表示する

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

DataGridViewのShowCellToolTipsプロパティがTrueであれば、セルにToolTipが表示されます。ShowCellToolTipsプロパティはデフォルトでTrueで、セルの幅が狭すぎてテキストが表示しきれない時に、そのテキストの内容がToolTipとして表示されます。

ToolTipTextプロパティを使用する

セルに表示するToolTipの内容を指定するには、セル(DataGridViewCell)のToolTipTextプロパティを使用します。

ヘッダーセルに表示するToolTipも同様に、こちらの方法によりヘッダーセルを取得して、普通のセルと同じようにToolTipTextプロパティで設定できます。ただ、列ヘッダーに表示するToolTipは、DataGridViewColumn.ToolTipTextプロパティでも設定できます。

VB.NET
コードを隠すコードを選択
'セルに表示するToolTipを設定する
DataGridView1(0, 0).ToolTipText = "このセルは変更できません"

'列ヘッダーに表示するToolTipを設定する
DataGridView1.Columns(0).ToolTipText = "この列には数字を入力できます"

'行ヘッダーに表示するToolTipを設定する
DataGridView1.Rows(0).HeaderCell.ToolTipText = "この行のセルは変更できません"
C#
コードを隠すコードを選択
//セルに表示するToolTipを設定する
DataGridView1[0, 0].ToolTipText = "このセルは変更できません";

//列ヘッダーに表示するToolTipを設定する
DataGridView1.Columns[0].ToolTipText = "この列には数字を入力できます";

//行ヘッダーに表示するToolTipを設定する
DataGridView1.Rows[0].HeaderCell.ToolTipText = "この行のセルは変更できません";

CellToolTipTextNeededイベントを使用する

多数のセルにToolTipを設定する場合は、一つ一つのセルのToolTipTextプロパティを設定する方法は、効率的とはいえません。このような場合は、CellToolTipTextNeededイベントを使用するとよいでしょう。

セルの現在の状態によってToolTipに表示させる文字列を変更させたい場合にも、CellToolTipTextNeededは役に立ちます。

ただしこのイベントは、DataSourceプロパティが設定されているか、VirtualModeプロパティがTrueの時にしか発生しません。

以下の例では、単純にセルの位置をToolTipで表示しています。

VB.NET
コードを隠すコードを選択
'CellToolTipTextNeededイベントハンドラ
Private Sub DataGridView1_CellToolTipTextNeeded(ByVal sender As Object, _
        ByVal e As DataGridViewCellToolTipTextNeededEventArgs) _
        Handles DataGridView1.CellToolTipTextNeeded
    e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString()
End Sub
C#
コードを隠すコードを選択
//CellToolTipTextNeededイベントハンドラ
private void DataGridView1_CellToolTipTextNeeded(object sender,
    DataGridViewCellToolTipTextNeededEventArgs e)
{
    e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString();
}

この方法ではヘッダーにもToolTipが表示されます。ヘッダーの場合は、行ヘッダーであれば「e.ColumnIndex」が-1に、列ヘッダーであれば「e.RowIndex」が-1になります。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。