我需要確定一個鍵在按下時是否會更改控件的文本;我需要忽略像Ctrl+Z
或Esc
這樣的按鍵,但是如果文字改變,我需要知道哪個按鍵被按下。如果RichTextBox的文本不會改變,則忽略KeyDown
有沒有辦法知道,在的KeyDown
事件?目前,我在KeyDown
上設置了一個標記,並在TextChanged
上進行了檢查,但我想知道是否有更好的方法?
我需要確定一個鍵在按下時是否會更改控件的文本;我需要忽略像Ctrl+Z
或Esc
這樣的按鍵,但是如果文字改變,我需要知道哪個按鍵被按下。如果RichTextBox的文本不會改變,則忽略KeyDown
有沒有辦法知道,在的KeyDown
事件?目前,我在KeyDown
上設置了一個標記,並在TextChanged
上進行了檢查,但我想知道是否有更好的方法?
您正在尋找Char.IsControl
private Keys lastKey = Keys.None;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
lastKey = e.KeyData;
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsControl(e.KeyChar))
{
e.Handled = true;//prevent this key press
Keys pressedKey = this.lastKey;
//Do your stuff with pressedKey here
}
}
我的想法正確+1 –
@DROPtableusers當我提出'Char.IsControl'時,我得到了一個downvote。後來刪除.. :( –
你能趕上在文本框中KeyPress
事件,如果它是一個有效的密鑰,您需要設置e.handled = false
,如果它是一個糟糕的鑰匙,你會設置e.handled = true
。
例如來自:here
private void keypressed(Object o, KeyPressEventArgs e)
{
// The keypressed method uses the KeyChar property to check
// whether the ENTER key is pressed.
// If the ENTER key is pressed, the Handled property is set to true,
// to indicate the event is handled.
if (e.KeyChar == (char)Keys.Return)
{
e.Handled = true;
}
}
有一些按鍵,產生Control
字符,但他們也改變了文本,例如BackSpace
。他們有另一個難點:如果textbox
爲空,按下它們(例如BackSpace
)不會更改文本;所以它打破了以前的規則。所以Control
字符並不天真地處理和建立規則。
此外,考慮Ctrl + C
或Shift + Insert
或類似的情況。 'C'鍵有點誘人;它就像是按'C
'改變文字,但如果它被按下'Ctrl'
,它實際上並沒有改變文字。我們應該檢查Modifiers
。
也許你可以找到其他的困難來處理,我認爲flag
方法已經足夠好了。
我不明白'你是否會改變控件的文本';'如果你的控件的文本改變了,'TextChanged'事件會得到它。 @Sriram在說什麼,尋找「IsControl」? – paqogomez
是的......問題是我需要知道KeyDown,在TextChanged解決 – ferc
之前我剛剛給出了一個提示。現在更新了我的答案。檢查是否可以幫助我 –