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
'programing' 카테고리의 다른 글
특정 확장자를 가진 모든 파일을 루프합니다. (0) | 2023.04.19 |
---|---|
텍스트 파일에서 ${} 자리 표시자를 바꾸려면 어떻게 해야 합니까? (0) | 2023.04.19 |
나머지 파일을 수정하지 않고도 하나의 Excel 파일 워크시트(탭)를 읽고 수정할 수 있습니까? (0) | 2023.04.19 |
Django에서 여러 개체를 ManyToMany 관계에 한 번에 추가하는 방법 (0) | 2023.04.19 |
XAML Designer가 표시되지 않음 (0) | 2023.04.19 |