ユーザーが列ヘッダーをクリックすると、CellContentClick が ArgumentOutOfRangeException をスローする

問題

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)