У меня была такая же проблема
В моем приложении ярлыки не работали, если форма открывалась с вызовом show (). Они работали, если форма открывалась с помощью ShowDialog (). Я также обнаружил, что событие keydown для текстового поля не было вызвано CTRL + C и т. Д., Но странным образом было вызвано CTRL + B.
Обходное решение, связанное с использованием события keyup вместо keydown.
Вот мой код:
public void ShortCut(object sender, KeyEventArgs e, TextBox box )
{
string s, tmp1, tmp2;
int selectionIndex;
switch (e.KeyCode)
{
case Keys.V: // paste
if (Clipboard.ContainsText())
{
s = Clipboard.GetText(TextDataFormat.Text);
selectionIndex = box.SelectionStart;
tmp1 = box.Text.Substring(0, selectionIndex);
tmp2 = box.Text.Substring(selectionIndex + box.SelectionLength);
box.Text = tmp1 + s + tmp2;
}
break;
case Keys.C: // copy
if (box.SelectionLength > 0)
{
selectionIndex = box.SelectionStart;
s = box.Text.Substring(selectionIndex, box.SelectionLength);
Clipboard.SetText(s);
}
break;
case Keys.X: // cut
if (box.SelectionLength > 0)
{
selectionIndex = box.SelectionStart;
s = box.Text.Substring(selectionIndex, box.SelectionLength);
Clipboard.SetText(s);
tmp1 = box.Text.Substring(0, selectionIndex);
tmp2 = box.Text.Substring(selectionIndex + box.SelectionLength);
box.Text = tmp1 + tmp2;
}
break;
case Keys.A: // all
box.SelectAll();
break;
}
}
// и вот пример, вызывающий его:
private void textBoxExpression_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control)
{
m_Host.ShortCut(sender, e, textBoxExpression);
}
else
{
....
}
}