2009-06-13 3 views
1

Привет, у меня есть приложение winform C# с определенной формой, заполненной несколькими текстовыми полями. Я хотел бы сделать так, чтобы нажатие клавиши со стрелкой вправо имитировало то же поведение, что и нажатие клавиши табуляции. Я не совсем уверен, как это сделать.C# Winform Alter Sent Keystroke

Я вообще не хочу изменять поведение клавиши табуляции, просто нажимайте клавишу со стрелкой вправо, чтобы делать то же самое, что и на этой форме.

Может ли кто-нибудь предложить какие-либо предложения?

ответ

2

Вы должны переопределить метод OnKeyUp в вашей форме, чтобы сделать это ...

protected override void OnKeyUp(KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Right) 
    { 
     Control activeControl = this.ActiveControl; 

     if(activeControl == null) 
     { 
      activeControl = this; 
     } 

     this.SelectNextControl(activeControl, true, true, true, true); 
     e.Handled = true; 
    } 

    base.OnKeyUp(e); 
} 
+0

Привет, Брайан, кажется, что он работает нормально, но он выполняет только итерации с помощью элементов управления на контейнере, на котором он находится, т. Е. - групповом поле, например. поэтому, если у меня есть 3 групповых ящика с элементами управления, они не перепрыгнут на следующий, так как клавиша табуляции будет – 2009-06-14 00:37:16

+0

. Я обновлю его, чтобы использовать SelectNext, который, как я думаю, работает рекурсивно на контейнерах. –

0

Я думаю, что это будет сделать то, что вы спрашиваете:

private void form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Right) 
    { 
     Control activeControl = form1.ActiveControl; 
     // may need to check for null activeControl 
     form1.SelectNextControl(activeControl, true, true, true, true); 
    } 
} 
0

Вы можете использовать событие KeyDown в форме поймать ключ инсульта затем выполнить любые действия, которые вы хотите. Например:

private void MyForm_KeyDown(object sender, KeyEventArgs e) 
{ 
    if(e.KeyCode == Keys.Right) 
    { 
     this.SelectNextControl(....); 
     e.Handled = true; 
    } 
} 

Не забудьте установить для свойства KeyPreview в форме значение True.

+0

Я бы переопределить метод вместо использования события. Кроме того, я бы не сделал этого на KeyDown, вы должны действительно отслеживать между клавишами вниз и вверх, чтобы убедиться, что у вас есть соответствующее полное нажатие клавиши. –