2017-05-21 13 views
0

私はDataGridViewコントロールを持つWinFormを持っています。それにはCheckBoxの列が含まれています。c#DataGridViewCheckBoxColumnクリック時のデフォルト動作を抑制する

私はCellMouseClickイベントを使用して、評価のための現在の列インデックスを評価します。チェックボックスの論理状態に関係なく、チェックボックスをクリックすると別のフォームが開きます。

新しいフォームでの入力の結果によっては、チェックボックスのStateを設定しようとしました。

残念ながら、私の設定は、チェックボックスのデフォルトの動作によって上書きされます。

I.e.チェックボックスが設定されている場合は、最後に設定されていません。

この現象を抑制または回避する可能性がある場合は、私の質問です。おそらくe.Handledのようなものでしょうか?

私はCellContentClickイベントも使用しましたが、結果は同じです。

+0

「CurrentCellDirtyStateChanged」と「NotifyCurrentCellDirty」が役立つかもしれません。 –

答えて

0

イベントDataGridView.CellValidatingを使用してください。リンクには、現在のセルのイベントをキャンセルする方法の例があります。 チェックボックスがある場合、このイベントは、ユーザーがセルを離れるときにのみ発生します。 この問題を解決するには、イベントDataGridView.CurrentCellDirtyStateChanged Eventを使用し、コミットを強制的に変更します。 exampleです。

0

ありがとうございました。残念ながら、あなたが記述した方法を使用して、私は希望の効果を達成することができません。私はイベントCurrentCellDirtyStateChangedとCellValidatingを使用します。 行動は私の目には何か変です。 CurrentCellDirtyStateChangedイベントの中で私はCommitEditを呼び出す前にチェックボックスのCellValueをチェックしていました(それは真です)。 CellValidatingイベントは発生しません。イベントを取り消すことはできません。

[OK]をクリックすると、チェックボックスをクリックして開いたフォームが閉じます。 CheckBoxセルを残しませんでした。

そこで私は、CurrentCellを別のセルに設定してCheckBoxセルを残して問題を解決しようとしました。 その結果、CellValidatingイベントが発生します。しかし、e.Cancel = trueに設定すると例外が発生します。

あなたの提案に基づいてもう一度試してみたら、CurrentCellDirtyStateChangedイベントとCellValidatingイベントを使用せずに目的の効果を達成できます。 追加フォームを終了した後、フォームから戻り値を取得し、この値に従ってCheckBoxセルを設定し、CurrentCellをCurrentRowの次のセルに設定し、RefreshEditを呼び出します。 CheckBoxの状態は常に正しい値に設定され、変更を加えずに追加のフォームを終了すると変更されません。 それは私が欲しいものです。 おそらくこれは、同様の問題を抱えている人を助けるかもしれません。

関連する問題