С помощью некоторых из Cyberintelligensia я теперь могу использовать комбинации Ctrl + [некоторая отображаемая клавиша], Ctrl + Shift + [некоторая отображаемая клавиша] и Ctrl + Shift + Alt + [некоторая отображаемая клавиша], чтобы добавлять символы с надстрочными знаками в текстовое окно.
Вопрос и ответы на него: здесь.
Однако есть еще одна непокорная комбинация. Я использовал предложение CodeCaster, чтобы добавить вызов «Debug.WriteLine (keyData);» чтобы увидеть, что в tarnation было нажато (какие клавиши). В большинстве случаев это работает нормально; например, если я нажму «Ctrl + Shift + E», он сообщает:
ControlKey, Control
ShiftKey, Shift, Control
E, Shift, Control
Итак, он отвечает, как я и ожидал, и вводит «É» в текстовое поле. Эта техника помогла мне увидеть, что нужно для ответа на "!" персонаж (D1).
Однако есть одна комбинация клавиш, которую он не распознает, а именно «Ctrl + Shift + N» (Ctrl + N работает). Когда я нажимаю Ctrl + Shift + N, окно вывода сообщает:
ControlKey, Control
ShiftKey, Shift, Control
IOW, отсутствует ожидаемое "N", поэтому в текстовое поле ничего не добавляется (следует добавить "Ñ").
Это единственный неудачный случай; все остальные комбинации клавиш работают.
Ctrl + N работает. Я вижу "ñ" в текстовом поле и получаю:
ControlKey, Control
N, Control
... в окне вывода.
Почему «N» в аккорде Ctrl + Shift + 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) остается внутри этой настольной утилиты.
N, Shift, Control
. Итак, something обрабатывает комбинацию клавиш, прежде чем она попадет в вашу форму. У вас есть меню или другие элементы управления в этой форме, какая у вас раскладка клавиатуры, есть ли у вас программа горячих клавиш, ... - person CodeCaster   schedule 02.07.2015