代码之家  ›  专栏  ›  技术社区  ›  Dan Fitch

如何在WinForms中创建自动UI事件跟踪?

  •  1
  • Dan Fitch  · 技术社区  · 15 年前

    我需要一个 现有WinForms应用程序 然后掉进 事件跟踪模式 希望摩擦力尽可能小。

    我希望看到用户所采取的每一个操作都是一个简单的堆栈跟踪对象:

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

    等等。

    • 如果这是一个WPF应用程序,我将做一些类似于筛选ETW中wclientInputMessage类型的所有事件的工作。
    • 我不能简单地转储堆栈跟踪,因为它不能捕获用户先前的操作。
    • 我可以将日志添加到每个事件[使用 this discussion ],但这是一个现有的应用程序 远的 事件太多。另外,我很懒。一定是更好的方法。
    • 我无法附加调试程序,我希望将此信息自动附加到该字段中测试用户的错误报告中,因为 [结果是…] 没有人能准确地记得他们点击的东西的顺序是什么。

    所以我想知道是否有人有任何好的技巧,使用子类化或反射,来锁定UI事件。

    性能不是真正的问题。如果我能在每一个事件中找到一个钩子,那就足够好了;我可以相当容易地将它们过滤到相关的集合中。

    2 回复  |  直到 15 年前
        1
  •  2
  •   George Mauer    15 年前

    观察者模式怎么样?用一组重载的日志方法(每个事件方法签名一个)创建一个EventLogger类来进行日志记录。在应用程序启动时实例化它并订阅每个UI事件。

    甚至可以通过反射自动进行订阅——尽管我认为设置订阅比为任何合理大小的应用程序手动进行订阅要费力得多。此外,您还必须确保EventLogger类对每个可能的事件处理程序方法签名都有一个日志方法。

        2
  •  0
  •   Robert Venables    15 年前

    您有多少种不同的控件类型?如果您只有一小部分要跟踪的控件类型,那么可能值得对它们进行子类化,并在项目上进行查找和替换,以将它们更改为子类。这只需要一两分钟。

    在子类控件中,可以重写方法的一小部分,在调用基方法之前添加跟踪。