Don't cloud the issue (and your mind!) by spending time with the teacher's code-- especially since it doesn't work. You've already told us that it's poorly designed. The way you describe it, he did the program completely from within the Visual Studio Forms designer.
Oh, I absolutely abhor the Forms designer in Visual Studio for anything more than paper doll prototyping. Almost every form I've ever done has been a collection of repeated functionality, so I end up creating all my forms by hand-- building my own repeated blocks (ususally based on the GroupBox class) and placing them programmatically on the form (I admit it-- I have old-school ints in my Form class that act as vertical and horizontal layout cursors that are modified by the Width and Height properties of Control as it's added to the Form).
I've not played with Mono lately, but it was my experience that the Portable.NET implementation of System.Windows.Forms worked much better.
I also would still advocate for a seperation between the GUI and the application logic. You can debug the application from the command line in Mono or P.NET, and then add the GUI front end later (either way you do it-- Visual Studio forms designer or by hand)