特にキーボードコードの質問に答えて、現時点で利用できる既製のオプションがあるとは思いません。
ただし、モデル化するには十分に単純である必要があります。おそらく、単一のクラスを作成しますKeyboardChordProvider
。フォームレベルでのキーボードイベントについて知る必要があります。他の場所で述べられているように、Form.KeyPreview
プロパティはである必要がありますtrue
。このプロバイダーがForm.KeyPress
イベントにサブスクライブするだけで十分な場合があります。フォームを渡した場合は、プロバイダーのコンストラクターでこれらすべてを実行できます。
潜在的なキーストロークをプロバイダーに登録する必要があります。
内部的に、このインスタンスは現在の状態を追跡します。コードの最初のキーを表すキーストロークが観察されるたびに、プロバイダーの状態を更新し、イベントを発生させて、サブスクライバーがテキストを設定できるようにします:(CTRL + W)が押されました。コードの2番目のキーを待っています...
次のキーストロークが潜在的なセカンダリオプションと一致する場合、一致があり、ChordPressed
入力されたストロークの詳細を含むイベントを発生させる可能性があります。または、コードが登録されたときにプロバイダーに渡された特定のコールバックを呼び出すこともできます(ChordPressed
イベントハンドラーにswitchステートメントやその他のディスパッチが含まれないようにするため)。
いつでも、キーストロークが潜在的な次のオプションと一致しない場合は、プロバイダーの状態をリセットします。
プロバイダーの内部では、ツリー構造を使用して可能なキーストロークをモデル化できます。プロバイダーの現在の状態は、特定のツリーノードにすぎません。最初は、ルートノードがアクティブになります。子がキーストロークに一致すると、次のストロークを見越して現在のノードになります。子がリーフノードである場合、コード全体が一致し、ChordPressed
イベントを発生させるか(そのポイントに到達したストロークのチェーンを渡す)、リーフに格納されているコールバックを呼び出します。子に一致するキーストロークがない場合は常に、ルートノードをアクティブにするようにリセットします。
このデザインはあなたが望むものを達成すると思います。