1

キャンセル ボタンを追加せずにフォームの編集をキャンセルする方法はありますか?

CancelButton.PerformClick() キャンセルボタンがないときに電話をかける方法を探しています。

フォーム コードに以下を追加しましたが、編集をキャンセルする方法を知る必要があります。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if(keyData == Keys.Escape) {
    // What goes here?
  }
  return base.ProcessCmdKey(ref msg, keyData);
}

フォームには、テキスト コントロールと BindingNavigator が含まれています。

を使用して必要なことを達成できることがわかりました

navigator.BindingSource.CancelEdit();

form.CancelButton.PerformClick()しかし、が設定されていない場合のような呼び出し方があるのだろうかと思いました form.CancelButton

4

1 に答える 1

2

キャンセルボタンを追加せずにフォームの編集をキャンセルする方法はありますか?

キャンセルボタンがないときに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は、標準のイディオムに従うと、これらすべてを自動的に処理します。そして、標準的なイディオムに従うことにはいくつかの本当に良い理由があります。

于 2013-03-10T11:29:01.613 に答える