一部の Cyberintelligensia の助けを借りて、Ctrl+[表示可能なキー]、Ctrl+Shift+[表示可能なキー]、および Ctrl+Shift+Alt+[表示可能なキー] の組み合わせを使用して、アクセント付きの文字をテキストボックス。
質問とその回答はこちらです。
ただし、まだ1つの反抗的な組み合わせがあります。CodeCaster の提案を使用して、「Debug.WriteLine(keyData);」への呼び出しを追加しました。ターネーションで何が押されたか (どのキー) かを確認します。ほとんどの場合、これで問題なく動作します。たとえば、「Ctrl + Shift + E」をマッシュすると、次のように報告されます。
ControlKey, Control
ShiftKey, Shift, Control
E, Shift, Control
期待どおりに応答しており、テキストボックスに「É」が入力されています。この手法は、「!」に応答するために何が必要かを理解するのに役立ちました。文字 (D1)。
ただし、識別できないキーの組み合わせが 1 つあります。それは、「Ctrl+Shift+N」です (Ctrl+N が機能します)。「Ctrl+Shift+N」を押すと、出力ウィンドウに次のように報告されます。
ControlKey, Control
ShiftKey, Shift, Control
IOW、予想される「N」が欠落しているため、テキストボックスには何も追加されません (「Ñ」を追加する必要があります)。
これは失敗する唯一のケースです。他のすべてのキーの組み合わせが機能します。
Ctrl+Nは機能します。テキストボックスに「ñ」が表示され、次のようになります。
ControlKey, Control
N, Control
...出力ウィンドウで。
Ctrl+Shift+N コードの「N」が「聞こえない」のはなぜですか?どうすれば修正できますか?
これは私が今持っているコードです:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Debug.WriteLine(keyData);
if (this.ActiveControl != null && this.ActiveControl is TextBox)
{
string replacement = "";
TextBox tb = (TextBox)this.ActiveControl;
bool useHTMLCodes = checkBoxUseHTMLCodes.Checked;
// ...
// N
if (keyData == (Keys.Control | Keys.N))
{
replacement = useHTMLCodes ? "ñ" : "ñ";
}
else if (keyData == (Keys.Control | Keys.Shift | Keys.N))
{
replacement = useHTMLCodes ? "Ñ" : "Ñ"; // not working
}
// ...
if (replacement != "")
{
tb.SelectedText = replacement;
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
前述のように、「Ñ」を発行する必要がある Ctrl+Shift+N をトラップするコードを除いて、すべてが機能します。
アップデート
私はこれを追加しました:
tb.ShortcutsEnabled = false;
...ここからですが、問題にはなりません。
更新 2
奇妙なことに、メモ帳を開くための Ctrl+Shift+N キーボード ショートカットは、デスクトップ (議論中のユーティリティで作業している場所) では機能しなくなりましたが、リモート デスクトップ セッション (Sharepoint で作業している場所) では機能します。 )。
リモート デスクトップ接続は本当にデスクトップでのキーストロークをインターセプトしていますか?
ただし、リモート デスクトップ セッションからログオフした場合でも、このデスクトップ ユーティリティ内に「ブラインド スポット」(Ctrl+Shift+N) が残ります。