[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