我想構建一個簡單的C#Windows窗體應用程序來收集用戶的擊鍵數據。如何收集使用C#的按鍵時間信息?
基本上,用戶需要輸入一個長度爲10的單詞。我想記錄每個按鍵的保持時間,keydown到keydown時間,keyup和keydown用於相鄰按鍵(所以有10 + 9 + 9 = 28個測量)。
任何人都可以告訴我如何使用文本框事件捕獲此信息?
在此先感謝
我想構建一個簡單的C#Windows窗體應用程序來收集用戶的擊鍵數據。如何收集使用C#的按鍵時間信息?
基本上,用戶需要輸入一個長度爲10的單詞。我想記錄每個按鍵的保持時間,keydown到keydown時間,keyup和keydown用於相鄰按鍵(所以有10 + 9 + 9 = 28個測量)。
任何人都可以告訴我如何使用文本框事件捕獲此信息?
在此先感謝
您可以處理你的TextBox
KeyUp
和KeyDown
事件。您可以使用DateTime.Now
獲取當前時間戳。
存儲你的最後KeyUp
和KeyDown
活動時間,並添加這樣測量:
private DateTime? keyUpTime = null;
private DateTime? keyDownTime = null;
private List<double> keyDownKeyUpMeasurements = new List<double>();
private List<double> keyDownKeyDownMeasurements = new List<double>();
private List<double> keyUpKeyDownMeasurements = new List<double>();
private void textBox_KeyDown(object sender, KeyEventArgs e)
{
DateTime prevKeyDownTime = keyDownTime;
keyDownTime = DateTime.Now;
if (prevKeyDownTime != null)
{
keyDownKeyDownMeasurements
.Add(keyDownTime.Subtract(prevKeyDownTime).TotalMilliseconds);
}
if (keyUpTime != null)
{
keyUpKeyDownMeasurements
.Add(keyDownTime.Subtract(keyUpTime).TotalMilliseconds);
}
}
private void textBox_KeyUp(object sender, KeyEventArgs e)
{
keyUpTime = DateTime.Now;
keyDownKeyUpMeasurements
.Add(keyUpTime.Subtract(keyDownTime).TotalMilliseconds);
}
謝謝,我認爲它可以工作。我試圖忽略不好的輸入。你知道如何使用KeyEventArgs.KeyValue嗎?是「string ch =((Char)e.KeyCode).ToString()」是否正確? –
我懷疑鑄造'(Char)e.KeyCode'將工作。 'KeyCode'返回'Keys'枚舉值。你想達到什麼目的?要過濾特定的字符,你可以使用'e.KeyCode!= Keys.A'。 –
用戶的輸入應該是長度爲10的固定單詞(如「abcdefghij」)。所以我需要檢查用戶是否按右鍵。我不想使用if(e.KeyCode!= keys.A && e.KeyCode!= Keys.B && ......)這樣的長條件。 –
你做工作? –
如果你必須經常處理這類事情,並且感覺很勇敢,那麼可以看看Reactive Extensions(http://msdn.microsoft.com/en-us/data/gg577609.aspx)。這幾乎就是它發明的。 –