0
WPF 응용 프로그램의 TextBox에서 키 조합을 잡으려고합니다. 단축키 명령 (Ctrl + C, Ctrl + V, Ctrl + X ...)에 연결된 조합을 제외하고 지금까지 작성한 코드 (다른 토론에서 찾은 코드)를 사용하면이 작업을 수행하는 데 도움이됩니다. 사용자가 텍스트 상자 (Space, Delete, Backspace 및 위의 모든 조합)를 누르는 모든 키를 찾으려고합니다.wpf의 텍스트 상자에서 단축키 명령을 비활성화하여 키 입력 감지를 유지합니다.
int MaxKeyCount = 3;
List<Key> PressedKeys = new List<Key>();
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Handled) return;
//Check all previous keys to see if they are still pressed
List<Key> KeysToRemove = new List<Key>();
foreach (Key k in PressedKeys)
{
if (!Keyboard.IsKeyDown(k))
KeysToRemove.Add(k);
}
//Remove all not pressed keys
foreach (Key k in KeysToRemove)
PressedKeys.Remove(k);
//Add the key if max count is not reached
if (PressedKeys.Count < MaxKeyCount)
//Add the key if it is part of the allowed keys
//if (AllowedKeys.Contains(e.Key))
if (!PressedKeys.Contains(e.Key))
PressedKeys.Add(e.Key);
PrintKeys();
e.Handled = true;
}
private void PrintKeys()
{
//Print all pressed keys
string s = "";
if (PressedKeys.Count == 0) return;
foreach (Key k in PressedKeys)
if (IsModifierKey(k))
s += GetModifierKey(k) + " + ";
else
s += k + " + ";
s = s.Substring(0, s.Length - 3);
TextBox.Text = s;
}
private bool IsModifierKey(Key k)
{
if (k == Key.LeftCtrl || k == Key.RightCtrl ||
k == Key.LeftShift || k == Key.RightShift ||
k == Key.LeftAlt || k == Key.RightAlt ||
k == Key.LWin || k == Key.RWin)
return true;
else
return false;
}
private ModifierKeys GetModifierKey(Key k)
{
if (k == Key.LeftCtrl || k == Key.RightCtrl)
return ModifierKeys.Control;
if (k == Key.LeftShift || k == Key.RightShift)
return ModifierKeys.Shift;
if (k == Key.LeftAlt || k == Key.RightAlt)
return ModifierKeys.Alt;
if (k == Key.LWin || k == Key.RWin)
return ModifierKeys.Windows;
return ModifierKeys.None;
}
누군가가 키 입력을 유지, 비활성화 바로 가기 명령에 대한 아이디어가있다 : 이 코드인가? 감사합니다.
나는 아무 결과, 그것을 시도. – jonyballerino
@jonyballerino : 핸들러에서'Handled'를'true'로 설정해야합니다. –
@jonyballerino : 방금 요청한 내용을 기억하고 있습니다. –