2012-02-05 7 views
1

아마도 하나의 문자가 포함 된 12 개의 텍스트 상자가있을 것입니다. 현재 텍스트 상자의 현재 텍스트를 지우려면 삭제 키를 처리해야합니다. 그런 다음 이동하여 탭 인덱스를 줄이고 이전 텍스트 상자를 편집하려면 뒤로 이동하십시오. 현재 텍스트 상자의 탭 인덱스를 참조하고 다시 이동하는 방법을 모르겠습니다. 다음으로 가려면 '탭'의 전송 키를 수행하는 것뿐입니다. 내 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}"); 

어쩌면이 할 수있는 더 좋은 방법이있다.

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 리스터가 제안 당신과 함께 SHIFT + TAB 키 조합을 보낼 수 있습니다 :

+0

Windows Form? WCF? 실버 라이트? 웹 양식? – balexandre

+0

windows form C#, .NET – ikathegreat

+0

'{SHIFT} {TAB}'해봤습니까? 그것은 약간의 해킹처럼 느껴진다. 더 나은 방법이 있어야합니다. –

답변

2

당신은 GetNextControl 방법으로 이전 TextBox을 찾을 수 있습니다
SendKeys.Send("+{TAB}");하지만 약간의 해키 솔루션입니다.

+0

예 "해킹"이 조금 나은 것 같습니다. 귀하의 솔루션에 대해,하지만 주요 프로세스 기능은 발신자 또는 "e"....를 정의하지 않습니다. 보호 된 재정의 bool ProcessCmdKey (ref Message msg, Keys keyData) {}' – ikathegreat

+0

'ProcessCmdKey'. 그것을 사용해야하는 특별한 이유가 있습니까? 왜냐하면 당신이'KeyDown'을 각'TextBox'에서 같은 핸들러로 구독하는 것이 트릭을하기 때문입니다. – nemesv