キャンセルボタンを追加せずにフォームの編集をキャンセルする方法はありますか?
キャンセルボタンがないときにCancelButton.PerformClick()を呼び出す方法を探しています。
一言で言えば、いいえ。キャンセルボタンは、作成していない限りありません。オブジェクトをプロパティに割り当てない限り、Form.CancelButton
プロパティはオブジェクトを指定しません。
ただし、達成しようとしていることを達成する方法があるかもしれません。これについて考えてみてください。キャンセルボタンがあったらどうなるでしょうか。そのキャンセルボタンは何をしますか?
フォームを閉じて、ユーザーの変更をすべて破棄しますよね?では、フォームを閉じてみませんか?何かのようなもの:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if(keyData == Keys.Escape) {
this.Close();
}
return base.ProcessCmdKey(ref msg, keyData);
}
キャンセル時にさらにクリーンアップを行う必要がある場合(たとえば、キャンセルボタンのClick
イベントハンドラーメソッドに通常入れるものは何でも)、のようなフォームクラスレベルのメソッドを定義してCancelForm
、それを呼び出すことができます。例えば:
private void CancelForm() {
// do cleanup
this.Close();
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if(keyData == Keys.Escape) {
this.CancelForm();
}
return base.ProcessCmdKey(ref msg, keyData);
}
それではまた、これをやりたいというあなたの動機に疑問を投げかけます。キャンセルをサポートしたい場合は、キャンセルボタンを追加してみませんか?ユーザーがキーボードコマンドを覚える必要があるのはなぜですか?キーボードコマンドは、それらを使用したいユーザーには最適ですが、GUIが非常に人気があるのには理由があります。ユーザーが操作をキャンセルできるようにする必要がある場合は、「em abigol」キャンセルボタンをユーザーがクリックできるようにします。キャンセルが利用できない場合は、必ず無効にして、視覚的なフィードバックを即座に提供してください。
ボーナスとして、Form.CancelButton
プロパティをフォームのキャンセルボタンに設定すると、Escキーによって自動的にキャンセルボタンが呼び出され、オーバーライドから解放されますProcessCmdKey
。あなたは問題を逆方向に解決しようとしているようです。WinFormsは、標準のイディオムに従うと、これらすべてを自動的に処理します。そして、標準的なイディオムに従うことにはいくつかの本当に良い理由があります。