programing

WPF에서 수식자 키 상태를 검출하려면 어떻게 해야 합니까?

cafebook 2023. 4. 19. 00:21
반응형

WPF에서 수식자 키 상태를 검출하려면 어떻게 해야 합니까?

[ Control ] 、 [ Shift ] 、 [ Alt ]버튼이 다운되어 있는지 여부를 확인할 때 언제든지 사용할 수 있는 글로벌 컨스트럭트가 있습니까?예를 들어 내부MouseDown의 사건TreeView.

만약 그렇다면, 어떻게?

class를 사용합니다.를 사용하여 Control, Shift, Alt가 다운되었는지 확인할 수 있습니다.

시프트의 경우:

if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }

컨트롤의 경우:

if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }

Alt의 경우:

if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }

또, 다음과 같은 것도 있습니다.

// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{

}
    private bool IsShiftKey { get; set; }

    private void OnPreviewKeyDown(object sender, KeyEventArgs e)
    {
        IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;

        if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
        {
           e.Handled = true;
        }
    }

(PreviewKeyDown을 사용하여) Alt + R을 찾습니다.

private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
       && e.SystemKey == Key.R)
    {
       //do whatever
    }
}

내가 왜 e를 썼는지 누가 좀 밝혀줄까?시스템 키뿐만 아니라키, 아마도 수식어 때문일까요? 하지만 수식어+키를 검색할 때 이것은 완벽하게 작동했습니다.

부분적으로 @Josh에서 빌려온 것으로 @Krushik과 비슷하며 KeyEventArgs.systemKey와 KeyEventArgs의 차이에 대한 질문도 언급하고 있습니다.(Josh가 SystemKey를 사용해야 하는 이유에 대한 답변). 여기서 Alt와 같은 수식 키를 사용하면 e.키가 키를 반환합니다.시스템, 즉 '실제' 키는 e 내에 있습니다.시스템 키

이 문제를 해결하려면 먼저 '실제' 키를 가져온 다음 조건부로 다음 작업을 수행합니다.

private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    // Fetch the real key.
    var key = e.Key == Key.System ? e.SystemKey : e.Key;

    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
        && key == Key.Return)
    {
        // Execute your code.
    }
}

또, 다음과 같은 것도 있습니다.

[내 컴퓨터]의 경우.키보드다음으로 Shift Key Down...

내 컴퓨터키보드Ctrl 키다운

내 컴퓨터키보드AltKeyDown

언급URL : https://stackoverflow.com/questions/5750722/how-to-detect-modifier-key-states-in-wpf

반응형