Just to close this off and hope that it will help others, I've created a project for each of my forms and I doubt there is a way to have only one project with many forms. My shared code sits in a different project and is referenced in all the forms. After successfully deploying, I thought I'd share some tips from my experience:
- Infopath is designed for simple forms. For complex forms that create lots of customised user experience, ASP.Net is the way to go. Infopath is quite painful, Microsoft hasn't developed Visual Studio much to support Infopath Dev, presumably Infopath is not a money spinner for them. So keep simple and be organised.
- Deployment is not even simple. There are 2 parts: Publish and Deploy. Publish your form manually (I haven't found an automation tool). Then to deploy, use this tool (credits to some kind guy or gal): http://infopathformsinstall.codeplex.com/releases/view/16178
- to share code, put in a separate project, update the version of your shared project by one number up (I've found that the moment you press build, your SharedCode.dll is considered different than the previous build's one and will cause deployment errors if the version number is unchanged. (Right click the SharedCode project > Properties, select Assembly Information, change the first number)
Thanks to many people's contributions, in particular Potemkine.
I live in Australia. Come visit! Oprah has just left... Oprah likes infopath too, just kidding!