2013-05-14 2 views
2

일부 이벤트에서 Shift + Tab을 누르고 싶습니다. 그 목적으로는 System.Windows.Forms.SendKeys.Send을 사용하고 있지만 작동하지 않습니다. 아래에서이 함수를 호출하는 방법을 시도했습니다.SendKeys.Send 함수가 작동하지 않습니다.

System.Windows.Forms.Application.DoEvents(); 
       SendKeys.Send("{+(Tab)}"); 

System.Windows.Forms.Application.DoEvents(); 
       SendKeys.Send("+{Tab}"); 

System.Windows.Forms.Application.DoEvents(); 
       SendKeys.Send("{+}{Tab}"); 

System.Windows.Forms.Application.DoEvents(); 
       SendKeys.Send("+{Tab 1}"); 

누군가 올바른 방법을 말해 줄 수 있습니까?

+2

어떻게 작동하나요? 발사하지 않니? 그들이 실제로 발사하지 않는다는 것을 어떻게 확인 했습니까? "일하지 않는 것"은 문제를 설명 할 수있는 최악의 방법입니다. – tnw

+0

_it이 작동하지 않는다는 것은 무엇을 의미합니까? 어떻게 테스트하고 있습니까? – gideon

+0

+ {TAB}이 (가) 올바른 구문이고 + {TAB 1}도 작동해야합니다. 다른 사람들은 다른 것을 할 것입니다. ('+ (Tab)'은 shift,'T','A'와'B' 키를 동시에 보내고'{+} {Tab}'은'+ '키 다음에'Tab'을 보낼 것입니다. 그것은 포커스를 설정할 요소에'.Focus()'호출이 옵션이 아닌 것으로 가정하는 것이 옳은가? – drf

답변

0

편집하고 싶지 않은 컨트롤에 아무 것도 입력하지 않거나 입력을 보내지 않습니까? 이 코드가 먼저 호출되는지 확인하고 SendKeys가 키를받을 수 있는지 확인하기 전에 수동으로 대상 컨트롤에 집중하는 것을 잊지 마십시오.

2

올바른 구문은 다음과 같습니다 당신이 제어 필드 사이의주기에 Shift+Tab을 눌러 구현하려는 귀하의 코멘트에 비추어

SendKeys.Send("+{Tab}"); 

는,이 키를 모방하지 않고 더 안정적으로 수행 할 수 있습니다. 이렇게하면 예를 들어 다른 창에 포커스가있는 문제를 피할 수 있습니다.

다음 방법은 Shift_Tab의 동작을 에뮬레이트은 탭을 통해 순환하는 역순으로 중지 :

void EmulateShiftTab() 
{ 
    // get all form elements that can be focused 
    var tabcontrols = this.Controls.Cast<Control>() 
      .Where(a => a.CanFocus) 
      .OrderBy(a => a.TabIndex); 

    // get the last control before the current focused element 
    var lastcontrol = 
      tabcontrols 
      .TakeWhile(a => !a.Focused) 
      .LastOrDefault(a => a.TabStop); 

    // if no control or the first control on the page is focused, 
    // select the last control on the page 
    if (lastcontrol == null) 
      lastcontrol = tabcontrols.LastOrDefault(); 

    // change focus to the proper control 
    if (lastcontrol != null) 
      lastcontrol.Focus(); 
} 

편집

삭제 된 텍스트 것이다 컨트롤을 통해주기 역순으로 (Shift + Tab을 에뮬레이션) 내장 된 이 충족되면 더 정확하게 처리됩니다. 벽돌 상자. 다음 방법은 Shift_Tab의 동작을 에뮬레이트하여 역순으로 탭 정지를 반복합니다.

void EmulateShiftTab() 
{ 
    this.SelectNextControl(
     ActiveControl, 
     forward: false, 
     tabStopOnly:true, 
     nested: true, 
     wrap:true); 
} 
관련 문제