問題
WinForm プロジェクトでは、DataGridView コントロールを使用しており、CellContentClick イベントを処理しています。ユーザーが列ヘッダーをクリックすると、次の例外がスローされます:
問題は、ユーザーが列ヘッダーをクリックすると、CellContentClick イベントが発生し、DataGridViewCellEventsArg.RowIndex の値が -1 になることです。 CellContentClick ハンドラーでは、RowIndex 値を使用して配列にインデックスを付けています。したがって、範囲外のインデックスです。
解決策
CellContentClick イベント ハンドラーで、次のように列ヘッダーをクリックして何もしないかどうかを確認します。
private void dataGrid_OnCellContentClick(object sender, DataGridViewCellEventArgs e)
{
var grid = (DataGridView)sender;
if (e.RowIndex < 0)
{
return;
}
if (grid[e.ColumnIndex, e.RowIndex] is DataGridViewLinkCell linkCell)
{
var linkUrl = linkCell.Value.ToString();
//Open link in browser
}
}
Code language: C# (cs)