2009-01-22 44 views
1

我需要採取現有的Winforms應用程序並放入事件跟蹤模式,希望儘可能少摩擦。如何在winforms中創建自動UI事件跟蹤?

我希望看到的每一個動作,用戶需要一個簡單的堆棧跟蹤前瞻性的事情:

MainForm.LaunchThing_Click 
ThingWindow.NameInput_Focus 
ThingWindow.NameInput_TextChanged 
ThingWindow.AddressInput_Focus 
ThingWindow.OKButton_Click 

等。

  • 如果這是一個WPF應用程序,我會做一些類似於在ETW中過濾所有類型爲WClientInputMessage的事件。
  • 我不能簡單地轉儲堆棧跟蹤,因爲它不捕獲用戶的先前操作。
  • 我可以將日誌記錄添加到每個單個事件中[使用來自this discussion的推薦做法],但是這是一個現有的應用程序,其中遠遠事件太多。另外,我很懶。得到更好的方法。
  • 我不能附加一個調試器,我想獲得這個信息自動附加到測試用戶在現場的錯誤報告,因爲[事實證明...]沒有人能夠準確地記得他們的順序是什麼點擊是。

所以我想知道如果任何人有任何好的技巧,使用子類或反射也許,鎖定到UI事件。

表現不是真正的問題。如果我能夠在每一場比賽中獲得一席之地,那就夠了。我可以很容易地將它們過濾到相關集。

回答

2

觀察者模式如何?使用一堆重載的Log方法創建一個EventLogger類(每個事件方法簽名一個)來執行日誌記錄。在應用程序啓動時將其實例化,並將其訂閱到每個UI事件。

甚至應該可以用反射自動進行訂閱 - 儘管我認爲設置該功能要比爲任何合理大小的應用程序手動執行更加費力。另外,您仍然必須確保EventLogger類具有每種可能的事件處理程序方法簽名的Log方法。

+0

您的解決方案更加清潔,+1。也許還可以在某個地方包含一個例程來自動附加到給定表單上的相關控件? – 2009-01-22 16:22:52

0

你有多少種不同的控制類型?如果您只有少數幾種控制類型需要跟蹤,那麼可能需要對它們進行子類化,並在項目中進行查找和替換以將其更改爲您的子類。這應該只需要一兩分鐘。

在您的子類控件中,您可以重寫一小部分方法,在調用基本方法之前添加跟蹤。