2012-12-22 3 views
0

커서 키를 무시하고 마우스로만 제어 할 수있는 C# split 컨테이너가 필요합니다. 어떻게해야합니까? 이것은 분할을 동시에 이동하지 않고도 측면 패널 중 하나에서 키보드 입력을 사용할 수 있기 때문입니다.SplitContainer, 커서 키 입력을 어떻게 중지합니까?

+0

이것은 Winforms 응용 프로그램이라고 생각하지만 실제로 _told_ 우리가 추측 할 필요는 없습니다. –

+0

여기에서 더 큰 문제가있는 경우 키보드 입력을받지 않도록 해당 패널에서 포커스를받을 수 없습니다. 당신이 달성하고자하는 것이 무엇인지는 매우 분명하지 않습니다. –

+0

winform 응용 프로그램입니다. 이 프로그램은 일면에지도가 있고 다른쪽에는 GUI가있는 일종의지도 편집기입니다. 현재 커서 키를 누르면지도가 예상대로 입력과 스크롤을 수신하지만 분할도 수행됩니다. – user540062

답변

0

컨트롤의 KeyDown 이벤트를 처리하는 키보드 입력을 비활성화 할 수 있으며, 필요한 경우 입력이 특정 키와 일치하는 경우 이벤트를 처리 할 수 ​​있습니다.

예 또한

splitContainer1.KeyDown += new KeyEventHandler(splitContainer1_KeyDown); //Link the KeyDown event of splitContainer1 to splitContainer1_KeyDown 

private void splitContainer1_KeyDown(object sender, KeyEventArgs e) 
{ 
    // if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right) //Continue if one of the arrow keys was pressed 
    // { 

      e.Handled = true; //Handle the event 
    // } 
} 

, 당신은 그 KeyDown 이벤트

에서 수집 KeyCode에 따른 SplitContainer 제어 SplitterMoving 이벤트를 취소하여 이동 스플리터 막을 수도
Keys KeyCode; //This is the variable we will use to store the KeyCode gathered from the KeyDown event into. Then, check if it matches any of the arrow keys under SplitterMoving event canceling the movement if the result was true 
splitContainer1.KeyDown += new KeyEventHandler(splitContainer1_KeyDown); //Link the KeyDown event of splitContainer1 to splitContainer1_KeyDown 
splitContainer1.SplitterMoving += new SplitterCancelEventHandler(splitContainer1_SplitterMoving); //Link the SplitterMoving event of splitContainer1 to splitContainer1_SplitterMoving 

private void splitContainer1_SplitterMoving(object sender, SplitterCancelEventArgs e) 
{ 
    if (KeyCode == Keys.Up || KeyCode == Keys.Down || KeyCode == Keys.Left || KeyCode == Keys.Right) //Continue if one of the arrow keys was pressed 
    { 
     KeyCode = Keys.A; //Reset the KeyCode 
     e.Cancel = true; //Cancel the splitter movement 
    } 
} 
private void splitContainer1_KeyDown(object sender, KeyEventArgs e) 
{ 
    KeyCode = e.KeyCode; //Set KeyCode to the KeyCode of the event 
// e.Handled = true; //Handle the event 
} 
,

감사합니다,
난 당신이 e.Handled = true를 또는 나를 위해 작동하지 않았다 분배기의 크기를 조정에서 키를 방지하기 위해 e.SuppressKeyPress = 실제 사용이 도움이 :)

+0

첫 번째 방법을 시도했지만 작동하지 않는 것 같습니다. 분할 컨테이너가 이미 해당 콜백에 도달하여 키 이벤트를 사용한 것으로 보입니다. 두 번째 방법은 더 성공적입니다. 감사. – user540062

1

을 찾을 수 있기를 바랍니다.

KeyDown에서 IsSplitterFixed = true로 설정하고 MouseDown/MouseMove에서 IsSplitterFixed = false로 설정하여 마우스로 크기를 조정할 수있었습니다.

public Form1() 
    { 
     InitializeComponent(); 

     splitContainer1.MouseMove += splitContainer1_MouseMove; 
     splitContainer1.KeyDown += splitContainer1_KeyDown; 
     splitContainer1.MouseDown += splitContainer1_MouseDown; 
    } 

    void splitContainer1_MouseDown(object sender, MouseEventArgs e) 
    { 
     splitContainer1.IsSplitterFixed = false; 
    } 

    void splitContainer1_MouseMove(object sender, MouseEventArgs e) 
    { 
     splitContainer1.IsSplitterFixed = false; 
    } 

    void splitContainer1_KeyDown(object sender, KeyEventArgs e) 
    { 
     splitContainer1.IsSplitterFixed = true; 
    }