【C#】DataGridViewのツールチップの全体または一部を非表示にする方法

サムネイルDGVツールチップ非表示のイメージ C#

DataGridViewのツールチップの表示/非表示の仕方のまとめ。

全体を非表示にする方法

DataGrieView全体のツールチップを非表示にする方法は、ShowCellToolTipsプロパティを変更するだけ。

dataGridView1.ShowCellToolTips = false;

一部を非表示にする方法

データ管理されたDataGridViewの場合

  • DataSourceが設定されている
  • VirtualModeがtrue

など、データが管理されている場合は、CellToolTipTextNeededイベントを使い、各個に設定する。

このイベントは、カーソルがセルの上にあるなど、セルのツールヒントが必要になった時に発生するイベントです。非表示にしたい条件で、 cell.ToolTipText = “”; とすれば、該当の条件のみ非表示にすることができる。

例えば、ColumnIndexが0の列を非表示にするには、以下のようにする。

private void dataGridView1_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e)
{
    // 行ヘッダーと列ヘッダーは除外※
    if ((e.RowIndex >= 0) && (e.ColumnIndex >= 0))
    {
        // ColumnIndexが0の列のツールチップを非表示とする
        if (e.ColumnIndex == 0)
        {
            var cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
            cell.ToolTipText = "";
        }
    }
}

※行ヘッダーと列ヘッダーのIndexは-1なので、それを除外しないまま実行すると、配列[-1]となり、ArgumentOutOfRangeExceptionが発生する。

データが管理されていないDataGridViewの場合

DataSourceの設定もVirtualModeもされていない場合は、Load時に設定。上記同様にToolTipTextを各個に設定する。

例えば、RowIndexが3の列を非表示にするには、以下のようにする。

for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
    for (int j = 0; j < dataGridView1.Rows.Count; j++)
    {
        // RowIndexが3以外の行のツールチップを非表示とする
        if (j == 3)
        {
            continue;
        }
        dataGridView1[i, j].ToolTipText = "";
    }
}

3点リーダー出現時のみツールチップを表示させるなど、特定の条件下でのみ表示/非表示させるやり方は模索中。。。いい方法あったら教えてください。

コメント

タイトルとURLをコピーしました