It has taken me far too long to code my first dialog in C# Windows Forms. Part of this is due to the fact that there were very few tools available in our projects on the C# side of the world, despite the fact that this particular coding initiative has been going on for well over a year. Part of it was just coming down the learning curve in C# Windows Forms.
However, I now have a large number of simple functions for reading and writing XML that have the advantage of centralizing the read/write functionality so that it always works in the same way; a number of classes that know how to read and write their XML representations so that they can be sent across the wire from the C# to the C++ side of the world and vice versa; and a control derived from the C# ErrorProvider that provides accessible error handling if the user requests it in user preferences. (The preference isn't coded yet, but the hook is there. Someone else is working on the preferences at the moment.)
I have spent the last couple of days making sure that the XML is correctly aligned everywhere so that member values are written as member values, attribute values are written as attribute values, and optional members are treated as optional instead of throwing an exception. I am now very close to getting this all to work.