CellContentClick genera ArgumentOutOfRangeException quando l'utente fa clic sull'intestazione della colonna

CellContentClick genera ArgumentOutOfRangeException quando l'utente fa clic sull'intestazione della colonna

Problema

In un progetto WinForm, stai usando un controllo DataGridView e stai gestendo l'evento CellContentClick. Quando l'utente fa clic sull'intestazione della colonna, viene generata la seguente eccezione:

Il problema è che quando l'utente fa clic sull'intestazione della colonna, attiva l'evento CellContentClick e il valore di DataGridViewCellEventsArg.RowIndex è -1. Nel tuo gestore CellContentClick, stai usando il valore RowIndex per indicizzare un array. Quindi, l'eccezione dell'indice fuori gamma.

Soluzione

Nel gestore dell'evento CellContentClick, controlla se hanno fatto clic sull'intestazione della colonna e non fanno nulla, in questo modo:

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)