<p>So I know that unit testing is a must. I get the idea that TDD is the way to go when adding new modules. Even if, in practice, I don't actually do it. A bit like commenting code, really. </p>

<p>The real thing is, I'm struggling to get my head around how to unit-test the UI and more generally objects that generate events: user controls, asynchronous database operations, etc. </p>

<p>So much of my code relates to UI events that I can't quite see how to even start the unit testing. </p>

<p>There must be some primers and starter docs out there? Some hints and tips? </p>

<p>I'm generally working in C# (2.0 and 3.5) but I'm not sure that this is strictly relevant to the question. </p>

You should separate logic and presentation. Using MVP(Model-View-Presenter)/MVC (Model-View-Controller) patterns you can unit test you logic without relying on UI events.
Also you can use
White framework
to simulate user input.
I would highly recommend you to visit Microsoft's
Patterns&Practices developer center
, especially take a look at composite application block and Prism - you can get a lot of information on test driven design.