Как интерпретировать Enter KeyPress как вкладку в C # - PullRequest
2 голосов
/ 07 января 2011

Я только недавно начал заниматься разработкой на C #, работал над проектом на основе форм и пытался выполнить действие «вкладка», когда пользователь находится в форме и нажал клавишу Enter.

Я знаю, что ответ, вероятно, довольно прост, но я новичок в этой области.

Ответы [ 4 ]

11 голосов
/ 07 января 2011

Добро пожаловать в SO Tex,

Я полагаю, что для этого есть два метода: просто добавьте:

Вариант 1: захват следующего элемента управления, если была нажата клавиша Enter

В свойствах вашей формы установите для свойства KeyPreview формы значение true.

Приведенный ниже код будет захватывать ваше событие «Enter-Press» и выполнять логику, которую вы ищете:

private void [YourFormName]_KeyDown(object sender, KeyEventArgs e)
{
    Control nextControl ;
    //Checks if the Enter Key was Pressed
    if (e.KeyCode == Keys.Enter) 
    {
        //If so, it gets the next control and applies the focus to it
        nextControl = GetNextControl(ActiveControl, !e.Shift);
        if (nextControl == null)
        {
            nextControl = GetNextControl(null, true);
        }
        nextControl.Focus();
        //Finally - it suppresses the Enter Key
        e.SuppressKeyPress = true;
    }
} 

Это фактически позволяет пользователю нажимать «Shift + Enter», чтобы перейти на вкладку «Далее».

Вариант 2. Использование метода SendKeys

private void [YourFormName]_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Enter)
  {
     SendKeys.Send("{TAB}");
  }
}

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

1 голос
/ 07 января 2011

Сначала подготовьте словарь, в котором ключом является первый элемент управления, а значением - второй.Переберите все элементы управления в коллекции элементов управления формы, поместите их в отсортированный список по TabIndex и преобразуйте его в словарь.

Вам потребуется код в событии KeyPress для каждого объекта или подкласс TextBox для включенияэто логика.В любом случае, в событии KeyPress, если вводом является Enter, получите следующий элемент управления из своего словаря и используйте Control.GetFocus ().

Надеюсь, это поможет!Я могу предоставить больше подробностей, если вы хотите.

0 голосов
/ 24 апреля 2014
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)  
{
        SendKeys.Send("{UP}");
        SendKeys.Send("{Right}");
}

private void onEnterKeyPress(object sender, KeyPressEventArgs e)
{

      if (sender is DataGridView)
      {
         int iColumn = DataGridView1.CurrentCell.ColumnIndex;
         if (iColumn == DataGridView1.Columns.Count - 1)
         {
               SendKeys.Send("{home}");
         }
         else
         {

               this.ProcessTabKey(true);
         }
       }
}
0 голосов
/ 07 января 2011

Вы можете обрабатывать события клавиатуры на уровне формы и на уровне приложения с помощью интерфейса Application.AddMessageFilter и IMessageFilter.

Все эти события имели свойство «Обработано», которое можно установить на «True», если вы будете обрабатыватькакой-то ключ вручную.(В вашем случае клавиша Enter).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...