2013-11-25 70 views
0

我想構建一個簡單的C#Windows窗體應用程序來收集用戶的擊鍵數據。如何收集使用C#的按鍵時間信息?

基本上,用戶需要輸入一個長度爲10的單詞。我想記錄每個按鍵的保持時間,keydown到keydown時間,keyup和keydown用於相鄰按鍵(所以有10 + 9 + 9 = 28個測量)。

任何人都可以告訴我如何使用文本框事件捕獲此信息?

在此先感謝

+0

你做工作? –

+0

如果你必須經常處理這類事情,並且感覺很勇敢,那麼可以看看Reactive Extensions(http://msdn.microsoft.com/en-us/data/gg577609.aspx)。這幾乎就是它發明的。 –

回答

4

您可以處理你的TextBoxKeyUpKeyDown事件。您可以使用DateTime.Now獲取當前時間戳。

存儲你的最後KeyUpKeyDown活動時間,並添加這樣測量:

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); 
} 
+0

謝謝,我認爲它可以工作。我試圖忽略不好的輸入。你知道如何使用KeyEventArgs.KeyValue嗎?是「string ch =((Char)e.KeyCode).ToString()」是否正確? –

+0

我懷疑鑄造'(Char)e.KeyCode'將工作。 'KeyCode'返回'Keys'枚舉值。你想達到什麼目的?要過濾特定的字符,你可以使用'e.KeyCode!= Keys.A'。 –

+0

用戶的輸入應該是長度爲10的固定單詞(如「abcdefghij」)。所以我需要檢查用戶是否按右鍵。我不想使用if(e.KeyCode!= keys.A && e.KeyCode!= Keys.B && ......)這樣的長條件。 –