I have started using the class designer in Visual Studio 2005 Standard and Professional editions. I am very happy with how both the code and the diagram are always in a consistent state. I am self-taught when it comes to UML diagrams and have found it benefitial to be able to go between the code and diagram views to be able to get the outline of the class the way I want it to be.
I have used Visio in the past, but found that the amount of work required to get a class diagram together and then put it into a sequence diagram (in visio) to be prohibitive. The process I am using now (that I think could only be better if it was completely within Visual Studio) is to design the classes using the combination of stubbing out methods and manipulating the class diagrams within visio. I then reverse engineer the project into Visio from the solution level using the Project > Visio UML > Reverse Engineer. I can then assess if I am missing anything when building my sequence diagrams in Visio as the method calls should already be defined within the generated class diagrams.
Now, some may argue that this process is too low level. For intermediate to senior developers who understand the architecture of the solution, I would agree. The reasoning for designing down to this level is intended to facilitate getting consultants or developers new to the process to be productive without requiring a lot of knowledge of how the system is intended to work. They should know how to implement methods following coding standards measured through static code analysis and write unit tests to maintain a high percentage of code coverage as I have discussed previously.
In any case, it would be nice to have a sequence diagram tool built into VS to be able to do the sequence diagrams from within there (likely already in VSTS) that has the same flexibility and real-time consistency that the class designer has.