winform窗体传值的问题!请高手赐教呀!小弟急!在线等待!

kissapple500 2008-08-22 10:48:30
右键点击树的某个节点,我要获取它的值,并且传递到另外一个窗体。我主要是想通过tag标识传递,请高手指点。

Form1中:
private void myTreeView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point p=new Point();
p.X= e.X;
p.Y = e.Y;

TreeNode tn = this.myTreeView.GetNodeAt(p);
if (tn != null)
{
//myTreeView.SelectedNode = tn;
this.Tag = tn.Text;
}
}
}

我这个时候在另外一个窗体Form2中某click事件中调用:
private void btnRight_Click(object sender, EventArgs e)
{
if (this.txtPath.Text.Trim() != null)
{

Form1 f1=new Form();
f1.ShowDialog();
string name = f1.Tag.ToString(); //这里直接调用那个tag不行吗??我设置断点看了下,name一直是null,获取不到值!!
}
}

高手快来赐教下啊 小弟急啊!
...全文
289 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiddkiller 2008-08-23
  • 打赏
  • 举报
回复
我怎么觉得这个有点奇怪!

Form1 f1=new Form();

应该是Form1 f1=new Form1();

hiddkiller 2008-08-23
  • 打赏
  • 举报
回复
设置 Form1 里 myTreeView控件的 Modifiers属性为 Public

private void btnRight_Click(object sender, EventArgs e)
{
if (this.txtPath.Text.Trim() != null)
{

Form1 f1=new Form();
f1.Show();
string name = f1.myTreeView.SelectedNode.Text;
}
}

试试看
hiddkiller 2008-08-23
  • 打赏
  • 举报
回复
Form1 f1=new Form();

晕! f1 是新的实例
kissapple500 2008-08-22
  • 打赏
  • 举报
回复
大哥!name属性还是NULL啊!
我改成这样了!
Form1 f1=new Form1();
fi.show()
di.BringToFront();
string name = di.Tag.ToString();
这里的name属性还是null!
而且设置断点,每次走到这句都会有NullReferenceException异常,name的值是null,获取不到!

大哥 您一定要帮帮俺啊!!小弟感激不尽啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
kissapple500 2008-08-22
  • 打赏
  • 举报
回复
大哥 你这个form1copy是什么啊 我这上面都没这个啊!

我看的出来大哥你是高手! 加我QQ好吗!!176527478!求求您帮俺解决下啊!!
csrwgs 2008-08-22
  • 打赏
  • 举报
回复
你的问题在于 f1.ShowDialog()后再返回到
string name = form1copy.Tag.ToString();
语句前Form1已经dispose了。
不信你可以看看Form1是不是=NULL

改一下



private void btnRight_Click(object sender, EventArgs e)
{
if (this.txtPath.Text.Trim() != null)
{

Form1 f1=new Form();
f1.Show();
f1.BringtoFront();
string name = form1copy.Tag.ToString(); //这里直接调用那个tag不行吗??我设置断点看了下,name一直是null,获取不到值!!
}
}


suen.sun 2008-08-22
  • 打赏
  • 举报
回复
前面那个窗体的Tag有没有真正被成功赋值,我的意思是MouseDown事件有没有获取到TreeNode。因为你用的GetNodeAt(Point point)方法。这个point参数很诡异。我记得一般情况下e.X我e.y是一个相对于屏幕的座标。你试一下计算成相对于控件的座标试试。这个有可能是座标没取正确的原因。
marvelstack 2008-08-22
  • 打赏
  • 举报
回复
关于类似这样的问题,建议楼主看一下下面的文章就懂了。
Windows窗体间的数据交互
http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx
accpyy 2008-08-22
  • 打赏
  • 举报
回复
窗体传值的方式最简单常用的一般有2种:
一种是用属性传递,在Form1中建立一属性供Form2调用
private string _SelNodeTag;
public string SelNodeTag
{
set
{
_SelNodeTag = value;
}
get
{
return _SelNodeTag;
}
}
在Form1中将值存到属性中
this.SelNodeTag = tn.Tag;
在Form2中调用
F1.SelNodeTag 即可

另一种是用公共变量传递
在Form1中建一个公共变量
public string SelNodeTag = "";
给变量付值
SelNodeTag = tn.Tag;

在Form2中调用
F1.SelNodeTag 即可
chuxue1342 2008-08-22
  • 打赏
  • 举报
回复
TreeNode tn = this.myTreeView.GetNodeAt(p);
================================================
你走了N个弯,其实就是得到选中节点的text值然后传给另一个窗口对吧?
String name=myTreeView.SelectedNode.Text;

Form1 f1=new Form1();
fi.show();
fi.属性(自己建)=name;
chuxue1342 2008-08-22
  • 打赏
  • 举报
回复
TreeNode tn = this.myTreeView.GetNodeAt(p);
================================================
你走了N个弯,其实就是得到选中节点的text值然后传给另一个窗口对吧?
String name=myTreeView.SelectedNode.Text;

Form1 f1=new Form1();
fi.show();
fi.属性(自己建)=name;

110,538

社区成员

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

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

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