[Mono-winforms-list] Window.Forms Problem

Cornel Barna cornelbarna@hotmail.com
Mon, 29 Sep 2003 11:16:56 +0300


Hi,

I installed latest version of mono an wine.
When i tried to run a simple application that uses windows.forms if fails. 
the message i get is:

Unhandled Exception: System.TypeInitializationException: An exception was 
thrown by the type initializer for System.Windows.Forms.Control ---> 
System.NullReferenceException: A null value was found where an object 
instance was required
--- End of inner exception stack trace ---

in (unmanaged) 00 System.Windows.Forms.Control:.ctor ()
in <0x0000e> 00 System.Windows.Forms.ScrollableControl:.ctor ()
in <0x00014> 00 System.Windows.Forms.ContainerControl:.ctor ()
in <0x00019> 00 System.Windows.Forms.Form:.ctor ()
in <0x00017> 00 XmlTreeView.frmXMLTreeView:.ctor ()
in <0x00054> 08 XmlTreeView.frmXMLTreeView:.ctor ()
in <0x0001e> 00 XmlTreeView.frmXMLTreeView:Main ()

Other aplications (console apps) works just fine, i have problems only with 
graphic application and i don't know where the problem come from 
(configuration problem ?!?) or how to solve it.

Here is the source code (compiled with "mcs /r:System.Windows.Forms 
/r:System.Drawing /r:System.Data frmXMLTreeView.cs"):

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Xml;
using System.IO;

namespace XmlTreeView
{

	public class frmXMLTreeView : System.Windows.Forms.Form
	{

		#region Constructors

		public frmXMLTreeView()
		{
			InitializeComponent();
		}

		#endregion


		#region Variables

		private System.Windows.Forms.TreeView tvTreeView;
		private System.Windows.Forms.OpenFileDialog ofdOpenFileDialiog;
		private System.Windows.Forms.MenuItem mnuFile;
		private System.Windows.Forms.MenuItem mnuFileOpen;
		private System.Windows.Forms.TextBox txtFilename;
		private System.Windows.Forms.MainMenu mnuMainMenu;
		private System.Windows.Forms.MenuItem mnuFileExit;
		private System.ComponentModel.Container components = null;

		#endregion


		#region Methods

		private void updateTreeView(string filename)
		{
			try
			{
				txtFilename.Text = filename;
				tvTreeView.Nodes.Clear();
				XmlDocument tmpxmldoc = new XmlDocument();
				tmpxmldoc.Load(filename);
				FillTree(tmpxmldoc.DocumentElement, tvTreeView.Nodes);
			}
			catch(Exception ex)
			{
				txtFilename.Text = ex.Message;
			}
		}


		private void FillTree(XmlNode node, TreeNodeCollection parentnode)
		{
			// End recursion if the node is a text type
			if(node == null || node.NodeType == XmlNodeType.Text || node.NodeType == 
XmlNodeType.CDATA)
				return;

			TreeNodeCollection tmptreenodecollection = AddNodeToTree(node, 
parentnode);

			// Add all the children of the current node to the treeview
			foreach(XmlNode tmpchildnode in node.ChildNodes)
			{
				FillTree(tmpchildnode, tmptreenodecollection);
			}
		}


		private TreeNodeCollection AddNodeToTree(XmlNode node, TreeNodeCollection 
parentnode)
		{
			TreeNode newchildnode = CreateTreeNodeFromXmlNode(node);

			// if nothing to add, return the parent item
			if(newchildnode == null) return parentnode;

			// add the newly created tree node to its parent
			if(parentnode != null) parentnode.Add(newchildnode);

			return newchildnode.Nodes;
		}


		private TreeNode CreateTreeNodeFromXmlNode(XmlNode node)
		{
			TreeNode tmptreenode = new TreeNode();

			if((node.HasChildNodes) && (node.FirstChild.Value != null))
			{
				tmptreenode = new TreeNode(node.Name);
				TreeNode tmptreenode2 = new TreeNode(node.FirstChild.Value);
				tmptreenode.Nodes.Add(tmptreenode2);
			}
			else if(node.NodeType != XmlNodeType.CDATA)
			{
				tmptreenode = new TreeNode(node.Name);
			}

			return tmptreenode;
		}


		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}


		[STAThread]
		static void Main()
		{
			Application.Run(new frmXMLTreeView());
		}


		#endregion


		#region Events

		private void mnuFileOpen_Click(object sender, System.EventArgs e)
		{
			if(ofdOpenFileDialiog.ShowDialog() == DialogResult.OK) 
updateTreeView(ofdOpenFileDialiog.FileName);
		}


		private void mnuFileExit_Click(object sender, System.EventArgs e)
		{
			Application.Exit();
		}


		#endregion


		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.tvTreeView = new System.Windows.Forms.TreeView();
			this.ofdOpenFileDialiog = new System.Windows.Forms.OpenFileDialog();
			this.txtFilename = new System.Windows.Forms.TextBox();
			this.mnuMainMenu = new System.Windows.Forms.MainMenu();
			this.mnuFile = new System.Windows.Forms.MenuItem();
			this.mnuFileOpen = new System.Windows.Forms.MenuItem();
			this.mnuFileExit = new System.Windows.Forms.MenuItem();
			this.SuspendLayout();
			//
			// tvTreeView
			//
			this.tvTreeView.ImageIndex = -1;
			this.tvTreeView.Location = new System.Drawing.Point(9, 30);
			this.tvTreeView.Name = "tvTreeView";
			this.tvTreeView.SelectedImageIndex = -1;
			this.tvTreeView.Size = new System.Drawing.Size(392, 394);
			this.tvTreeView.TabIndex = 0;
			//
			// ofdOpenFileDialiog
			//
			this.ofdOpenFileDialiog.Filter = "Xml Files |*.xml";
			//
			// txtFilename
			//
			this.txtFilename.BackColor = System.Drawing.Color.White;
			this.txtFilename.Location = new System.Drawing.Point(10, 4);
			this.txtFilename.Name = "txtFilename";
			this.txtFilename.ReadOnly = true;
			this.txtFilename.Size = new System.Drawing.Size(391, 20);
			this.txtFilename.TabIndex = 1;
			this.txtFilename.Text = "";
			//
			// mnuMainMenu
			//
			this.mnuMainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																						this.mnuFile});
			//
			// mnuFile
			//
			this.mnuFile.Index = 0;
			this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					this.mnuFileOpen,
																					this.mnuFileExit});
			this.mnuFile.Text = "&File";
			//
			// mnuFileOpen
			//
			this.mnuFileOpen.Index = 0;
			this.mnuFileOpen.Text = "&Open";
			this.mnuFileOpen.Click += new 
System.EventHandler(this.mnuFileOpen_Click);
			//
			// mnuFileExit
			//
			this.mnuFileExit.Index = 1;
			this.mnuFileExit.Text = "&Exit";
			this.mnuFileExit.Click += new 
System.EventHandler(this.mnuFileExit_Click);
			//
			// frmXMLTreeView
			//
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(410, 435);
			this.Controls.Add(this.txtFilename);
			this.Controls.Add(this.tvTreeView);
			this.Menu = this.mnuMainMenu;
			this.Name = "frmXMLTreeView";
			this.Text = "Xml TreeView";
			this.ResumeLayout(false);

		}
		#endregion

	}
}

Pleasse help!

Cornel

_________________________________________________________________
MSN 8 with e-mail virus protection service: 2 months FREE* 
http://join.msn.com/?page=features/virus