2013-07-12 2 views
1

우리 응용 프로그램에서는 사용자가 일부 데이터를 편집하는 데 사용하는 속성 표가 있었는데 사용자가 탭을 통해 그릴 수있는 속성 표가 가장 도움이 될 것이라고 들었습니다 . 그래서 사용자가 모든 데이터를 탭 할 수있는 속성 표를 만들었습니다. 문제는 모든 데이터를 탭킹 한 후에 다음 탭 컨트롤을 탭 순서의 다음 컨트롤로 이동 시키려고하는 것입니다.C# 사용자 지정 속성 표에서 탭 순서대로 다음 컨트롤로 이동

속성 표는 탭 순서 중간에 있습니다. 나는 여기에서 발견 된 해결책을 조정할 것을 시도했다 : Validate Textbox Text and Increase the Tab Order Once, 그러나 운이 없었다.

어떻게 탭에 대한 코드는 속성 그리드에서 처리됩니다

protected override bool ProcessKeyPreview(ref Message m) 
    { 
     int wParam = m.WParam.ToInt32(); 

     switch (m.Msg) 
     { 
      case WM_KEYDOWN: 
       { 
        if (wParam == SHIFT) 
        { 
         isShiftDown = true; 
         return true; 
        } 
       } 
       break; 

      case WM_KEYUP: 
       { 
        if (wParam == TAB) 
        { 
         moveSelectedGridItem(!isShiftDown); 
         return true; 
        } 
        else if (wParam == SHIFT) 
        { 
         isShiftDown = false; 
         return true; 
        } 
       } 
       break; 
     } 

     return ProcessKeyEventArgs(ref m); 
    } 
+0

속성 표에서 Tab을 어떻게 처리합니까? –

+0

위 내용을 추가했습니다! – PattersonWR

답변

0

나는 문제가 있으면 해결 방법을 시도해보고이를 되돌려 보냅니다.

보호 된 재정의 bool ProcessKeyPreview (참조 메시지 m) { int wParam = m.WParam.ToInt32();

switch (m.Msg) 
    { 
     case WM_KEYDOWN: 
      { 
       if (wParam == SHIFT) 
       { 
        isShiftDown = true; 
        return true; 
       } 
      } 
      break; 

     case WM_KEYUP: 
      { 
       if (wParam == TAB) 
       { 
        bool ismoved = moveSelectedGridItem(!isShiftDown); 

        // First: modify the method "moveSelectedGridItem" to return bool value (if grid moved: true, if TAB pressed after last grid item: false) 

        if(!ismoved) 
         // handle your implementaion here 

        return true; 
       } 
       else if (wParam == SHIFT) 
       { 
        isShiftDown = false; 
        return true; 
       } 
      } 
      break; 
    } 

    return ProcessKeyEventArgs(ref m); 
} 
+0

그래서 isMoved가 false이면 탭 순서를 증가시킬 수 있습니까? – PattersonWR

+0

예, 그것이 효과가 있기를 바랍니다. –

+0

그랬어! 이런. ParentForm.SelectNextControl을 호출하고 탭 순서의 다음 컨트롤로 이동할 수있었습니다! 고맙습니다! – PattersonWR

0

난 당신이 설명한 동작이의 WinForm 제어를위한 표준 동작, 일반적으로 사용자 아니라고 생각에 반복하기 전에 ESC를 눌러야 커서가 "안에"이면 TAB을 처리하는 컨트롤입니다. 그렇지 않으면 과 같은 것을 구현해야합니다. RaiseSomeEventToParentControl나는이 가능하거나 권장하지 않는다고 생각합니다.

+0

당신이 옳을 수도 있습니다. 나는 계속 볼거야. 나는 어딘가에서 뭔가를 놓쳤을지도 모른다. – PattersonWR