DataSource が DataTable である DataGridView があります。この DataTable にはブール列があり、DataGridView のチェックボックスとして解釈されます。
employeeSelectionTable.Columns.Add("IsSelected", typeof(bool));
...
employeeSelectionTable.RowChanged += selectionTableRowChanged;
dataGridViewSelectedEmployees.DataSource = employeeSelectionTable;
...
private void selectionTableRowChanged(object sender, DataRowChangeEventArgs e)
{
if ((bool)e.Row["IsSelected"])
{
Console.Writeline("Is Selected");
}
else
{
Console.Writeline("Is Not Selected");
}
break;
}
ユーザーがチェックボックスを 1 回クリックすると、チェックボックスがオンになり、selectionTableRowChanged は「Is Selected」を出力します。
同様に、ユーザーが再度チェックすると、ボックスはクリアされ、selectionTableRowChanged は「選択されていません」を出力します。
ここに問題があります:
ユーザーがチェックボックスをダブルクリックすると、チェックボックスがチェックされ、RowChanged イベントが呼び出され (「Is Selected」)、チェックボックスがクリアされ、対応する RowChanged イベントは呼び出されません。現在、RowChanged イベントのサブスクライバーは同期していません。
私の現在の解決策は、DataGridView をサブクラス化し、WndProc をオーバーライドして WM_LBUTTONDBLLICK を食べることです。これにより、コントロールのダブルクリックは無視されます。より良い解決策はありますか?