2012-02-05 6 views
1

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

в моей функции keyprocess я есть:

//DEL goes back one text box and clears it 
      if (keyData == (Keys.Delete)) 
      { 
       //Clear textbox 
       //Go back one textbox to edit 
       return true; 
      } 

снова, как только я закончил редактирование текстового поля я посылаю:

SendKeys.Send("{TAB}"); 

может быть, есть лучший способ сделать это.

+0

Windows Form? WCF? Silverlight? Веб-формы? – balexandre

+0

windows form C#, .NET – ikathegreat

+0

Вы пробовали '{SHIFT} {TAB}'? Тем не менее, он чувствует себя немного взломанным. Должны быть лучшие способы. –

ответ

2

Вы можете найти предыдущую TextBox с помощью метода GetNextControl:

if (e.KeyCode == Keys.Delete) 
{ 
    var textBox = ((TextBox) sender); 
    textBox.Text = string.Empty; 

    var previous = textBox.Parent.GetNextControl(textBox, false); 
    if (previous != null) 
     previous.Focus(); 

    e.Handled = true; 
} 

Или, как предложил @Mr Lister вы можете отправить сочетание клавиш SHIFT + TAB с:
SendKeys.Send("+{TAB}"); но это немного Hacky решение.

+0

Да «хак» кажется немного лучше. для вашего решения, но ключевая функция процесса не определяет отправителя или «e» .... 'protected override bool ProcessCmdKey (ref Message msg, Keys keyData) {}' – ikathegreat

+0

Неясно, из вашего вопроса, который вы используете 'ProcessCmdKey'. Есть ли какая-то особая причина для его использования? Потому что из того, что вы описали, подписались на 'KeyDown' с тем же обработчиком на каждом' TextBox', также будет делать трюк. – nemesv

Смежные вопросы