定义了公共变量,调用时为什么为Null?

hengyi82 2008-10-04 05:28:24
我在Form1窗口中定义了:
public partial class Form1 : Form
{
public TreeNode hitNode;
public XmlDocument doc;
}
这两个公共变量,并且在Form1这个类的程序中给hitNode和doc赋了值。但我在Form2窗口中调用这两个变量,调试时却显示这两个变量的值为Null,请问这是怎么回事?
调用的代码是这样写的:
public partial class Form2 : Form
{
private void btnOk_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
TreeNode fNode = f.hitNode; //显示hitNode和doc都为null
XmlNode root =(XmlNode) f.doc.DocumentElement;
。。。。
。。。。
this.Close();
}
}
...全文
167 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
VTYale 2008-10-06
  • 打赏
  • 举报
回复
在form中重载一个带form1参数的构造
为变量赋值后把form1作为参数构造form2
否则你直接在form2中new一个form1是不可能有值的
5楼正解
liurenfu 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhangzeshuai 的回复:]
Form1 f = new Form1();
你重新实例化了,所以里面都是null。
应该将from1传递到from2中,使用。
[/Quote]
5楼是正解,可以结贴了
ChargeForward 2008-10-04
  • 打赏
  • 举报
回复

这样写不美观吗?

public partial class Form1 : Form
{
public TreeNode hitNode;
public XmlDocument doc;

private void Form1(object sender, EventArgs e)
{
doc = new XmlDocument();
doc.Load(@"D:\cs程序\treeViewMenu1\treeViewMenu1\menu.xml");
XmlElement root = doc.DocumentElement;
TreeNode rootNode = new TreeNode(root.Name);
treeView1.Nodes.Add(rootNode);
AddTreeNode((XmlNode)root, rootNode);
ListViewShow(rootNode);

}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{

TreeViewHitTestInfo info = treeView1.HitTest(e.X, e.Y);
if(info.Node != null)
{
this.hitNode = info.Node; contextMenuStrip1.Show(treeView1, new Point(e.X, e.Y));
}

}
}

private void MenuItemNew_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.ShowDialog(); }
ChargeForward 2008-10-04
  • 打赏
  • 举报
回复
我想不到 你查一下C#中的静态全局变量 如果仅是代码美观的问题 劝你还是写在构造函数中
hengyi82 2008-10-04
  • 打赏
  • 举报
回复
如果要写,也可以。只是都写在构造函数里,就显得很不好看了。我的意思是有没有不写在构造函数中的方法。
ChargeForward 2008-10-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hengyi82 的回复:]
哦,原来如此,我明白为什么是null了。可是我的这个赋值行为不能写在构造函数里,请问各位还有什么方法能保证hitNode、doc的值传递到form2中去么?是不是需要在form1窗口中调用form2窗口时再定义个什么东西?
[/Quote]
可是我的这个赋值行为不能写在构造函数里,

不能写在构造函数里?
行者无疆-Kevin 2008-10-04
  • 打赏
  • 举报
回复
public TreeNode hitNode;
public XmlDocument doc;
你把这两个东西定义为静态全局变量,登陆时就赋好值。
这样你到哪里用就都有值了。
hengyi82 2008-10-04
  • 打赏
  • 举报
回复
哦,原来如此,我明白为什么是null了。可是我的这个赋值行为不能写在构造函数里,请问各位还有什么方法能保证hitNode、doc的值传递到form2中去么?是不是需要在form1窗口中调用form2窗口时再定义个什么东西?
行者无疆-Kevin 2008-10-04
  • 打赏
  • 举报
回复
给你回复了邮件,看看。
ChargeForward 2008-10-04
  • 打赏
  • 举报
回复


public partial class Form1 : Form
{

public TreeNode hitNode;
public XmlDocument doc;

Form1()
{
hitNode="";//将赋值行为写在构造函数里面 否则此类初始新的实例时,两者清空为NULL
doc="";
}

}
hengyi82 2008-10-04
  • 打赏
  • 举报
回复
将from1传递到from2中,什么意思?怎么传递?
我的部分代码是这样的,代码比较长,很多都很这无关,大家只需要看红色字体的部分就可以了:
public partial class Form1 : Form
{
public TreeNode hitNode;
public XmlDocument doc;

private void Form1_Load(object sender, EventArgs e)
{
doc = new XmlDocument();
doc.Load(@"D:\cs程序\treeViewMenu1\treeViewMenu1\menu.xml");
XmlElement root = doc.DocumentElement;
TreeNode rootNode = new TreeNode(root.Name);
treeView1.Nodes.Add(rootNode);
AddTreeNode((XmlNode)root, rootNode);
ListViewShow(rootNode);

}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{

TreeViewHitTestInfo info = treeView1.HitTest(e.X, e.Y);
if(info.Node != null)
{
this.hitNode = info.Node;
contextMenuStrip1.Show(treeView1, new Point(e.X, e.Y));
}

}
}

private void MenuItemNew_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.ShowDialog();
}
下面是Form2中的代码:
private void btnOk_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
TreeNode fNode = f.hitNode;
XmlNode root =(XmlNode) f.doc.DocumentElement;
.....
.....
this.Close();
}
我在form1中都有值的,到了form2中,就是null了。
freeboy827 2008-10-04
  • 打赏
  • 举报
回复
CSDN有问题
freeboy827 2008-10-04
  • 打赏
  • 举报
回复
没有赋值,肯定是null
行者无疆-Kevin 2008-10-04
  • 打赏
  • 举报
回复
Form1 f = new Form1();
你重新实例化了,所以里面都是null。
应该将from1传递到from2中,使用。
freeboy827 2008-10-04
  • 打赏
  • 举报
回复
你没有赋值,肯定是NULL
jishengzu 2008-10-04
  • 打赏
  • 举报
回复
public partial class Form2 : Form
{
private void btnOk_Click(object sender, EventArgs e)
{
Form1 f = new Form1(); //这代码执行后2个变量就有值?
TreeNode fNode = f.hitNode; //显示hitNode和doc都为null
XmlNode root =(XmlNode) f.doc.DocumentElement;
。。。。
。。。。
this.Close();
}
}
hengyi82 2008-10-04
  • 打赏
  • 举报
回复

调试时看过的
在form1中都有值
在form2中调用就是null了
真搞不懂是什么意思?
jishengzu 2008-10-04
  • 打赏
  • 举报
回复
你确定那2个变量在Form1 中有值

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧