現在、編集メインメニューのキーボードショートカットとしてCtrl + CとCtrl + Vを使用したC#winformsアプリケーションがあります。これらのメニュー項目に応答するカスタムのコピー/ペーストの動作がコード内にあります(リストビューの行のコピーや貼り付けなど)。テキストエディットのコピー/ペーストを許可しながら、C#winformsによるカスタムコピー/貼り付けの動作
しかし、私の問題は、行の中のテキストを編集できることです。そうした場合、Ctrl + CとCtrl + Vを押して編集メニューコマンドを起動し、通常のテキストベースのコピー/ペースト。
BeforeLabelEditイベントとAfterLabelEditイベントがトリガされ、そこからメニュー項目を手動で無効/再有効化することを試みました。残念ながら、無効化されたメニュー項目のキーボードショートカットはまだ有効になっている/無効にする必要のあるメニュー項目を決定するために使用されているmenu_Popupイベントをトリガーしているようです。 (たとえば、「貼り付け」は、クリップボードにテキストがある場合のみ有効です)。したがって、メニュー項目を無効にしても、キーボードショートカットはポップアップイベントをアクティブにします。これにより、メニュー項目が再び有効になります。 (これはバグですか?)
メニュー項目のキーボードショートカットを一時的に無効にする方法はありません。手動で古いショートカットを保存し、ショートカットをnullに設定してから再度有効にする必要があるときにコピーし直す必要はありません(汚いと感じる)。
コピー/ペーストの動作を上書きしたり、追加したりするのはよくあることです。ここで使用するより良いパターンがありますか?
ovveridingコピー貼り付けは私に悪い考えとして鳴ります。私はいつもすべてのアプリで同じように動作する 'コピー/貼り付け 'に慣れています。あなたのアプリはちょうど私を混乱させるでしょう。 しかし、もしあなたが主張しているのであれば、焦点を確認してみてはいかがですか?フォーカスがあなたのテキストボックスにある場合コピーを1つコピーする他のコピーをしない場合 – Nahum
カスタムコピー/ペーストの動作は、テキストを編集していないときに行をコピーして貼り付けることを扱います。テキストを編集しているときに、デフォルトのコピー/ペーストの動作が必要です。 –
メニューのショートカットキーをクリアするのが最も簡単です。他の選択肢は「汚れ」ます。 –