2012-09-17 10 views
0

我有一個PreviewKeyDown事件,我用來過濾我的輸入(我需要過濾掉其他東西之間的空格,所以使用PreviewKeyPress出)。是否有一個「分組」的方式來知道PreviewKeyDown鍵是Delete,Home,End,Pg Up等

這一切都工作正常,除了它吃我的刪除,退格,家庭,箭頭,上頁等按鍵。

我只能儘量想的一切,我覺得關鍵的應該被允許,並告訴我的情況下忽略它們:

if ((e.Key == Key.Up) || (e.Key == Key.Down) || (e.Key == Key.Left) 
    || (e.Key == Key.Right) || (e.Key == Key.Delete) || (e.Key == Key.Home) 
    || (e.Key == Key.End) || (e.Key == Key.PageUp) || (e.Key == Key.Insert) 
    || (e.Key == Key.F1)) 

但我相信我會錯過一些。

有沒有更好的方法,只是做一個巨大的「或」的聲明,並希望我把他們全部?

+0

你就不能在'KeyPress'過濾?當你可以處理字符而不是鍵時,它會容易得多。 – CodesInChaos

+0

順便說一句,鍵和字符之間沒有一對一的映射。考慮像死鎖,移位狀態,樂趣... – CodesInChaos

+0

@CodesInChaos - PreviewKeyPress不會收到空格。 (如果你知道一種方法來獲得PreviewKeyPress來獲取空格,那麼這將是非常棒的!) – Vaccano

回答

0

我會在KeyPress做過濾。那時你會處理字符,而不是使用鍵。所以你不需要關心它們中的大多數(AFAIR有一些例外,例如返回或退格)。

使用e.Handled來抑制字符。

+0

唉,PreviewKeyPress不會看到空格。我在關鍵媒體上全部掌握了這一切,但必須將我的邏輯轉移到KeyDown,以便能夠捕獲空間。 – Vaccano

0

我使用這個:How do you get the character appropriate for the given KeyDown event?將我的鍵值轉換爲字符。

我意識到如果密鑰不是有效字符,那麼它將被設置爲ASCII 32(空格)。

所以我只是要過濾掉的那個....

// If this was not a true char then it will convert to the ASCII Space (#32). 
// If this is not really a char, then we are done. 
if ((newChar == (char)32) && (e.Key != Key.Space)) 
    return; 
相關問題