Когда выполняется анализ решения Resharper и nCrunch Boths, он останавливает мой текстовый редактор.
Слишком много для моих шести ядер.
Решение - это 14 проектов и около 120 тыс. Строк кода.
Я решил эту проблему, зарегистрировав глобальные горячие клавиши. Спасибо. Этот был ресурсом, который я использовал для решения моей проблемы.
Я могу сделать неверное предположение, но если вы используете это с текстовым полем, вы можете:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 'a')
{
e.Handled = true;
}
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A)
{
e.Handled = true;
SendKeys.Send("s");
}
}
Или даже проще:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 'a')
{
e.Handled = true;
SendKeys.Send("s");
}
}
Или, если это не для использования просто с помощью текстового поля, тогда разве вы не можете просто перевернуть обратное пространство и отправить s-ключ?
if ((Keys)keyCode== Keys.A)
{
SendKeys.Send("{BS}"); // remove A
SendKeys.Send("s"); // add S
}
Возможно, это не то, что вам нужно / нужно, но если вы просто хотите переназначить некоторые клавиши клавиатуры, я бы посоветовал изучить использование другой раскладки клавиатуры или создание собственной раскладки. Вы можете создавать новые макеты следующим образом:
Я бы отменил свои вызовы:
SendKeys.Send ("{BS}");
SendKeys.Send ("S");
EDIT (после обновления вопроса ):
Если вы работаете со строкой (для ваших специальных символов), можете ли вы просто захватить строку, сгенерированную нажатием клавиши ("a"), и изменить ее, установив для строки значение Unicode символа персонаж, которого вы пытаетесь изобразить? Если другие решения, о которых упоминали люди, не работают, я бы попробовал следующее ...
Другой вариант, который у вас есть, - использовать низкоуровневые перехватчики клавиатуры, чтобы поймать старого персонажа, а затем отправьте новый. Это потребует некоторого P / Invoke, но дает вам возможность полностью захватить исходный ключ, чтобы приложения его даже не видели.
Я думаю, что подход SendKeys.Send ("{BS}");
никогда не будет работать (в любом порядке). Это связано с тем, что исходное событие нажатия / отпускания клавиши обрабатывается после публикации SendKeys.Send
. Я думаю, вам следует как-то отменить событие нажатия / нажатия клавиши для символа, которого вы хотите удалить, прежде чем оно будет обработано целевой оконной процедурой (например, блокнотом).
Я получаю "a", потому что backspace отправлено сразу после "s" и удаляет символ "s". Как я могу предотвратить это?
ммм .....
не отправлять backspace сразу после отправки s?
if ((Keys)keyCode== Keys.A)
{
Sendkeys.Send("{BS}"); // Deletes the "A" (already sent)
SendKeys.Send("s"); // Sends the "S"
}
Вы пробовали переключить .Send ({BS})
на .Send ("s")
? А иначе можете уточнить?