引用的传递。。。。

love_adam 2008-12-02 12:54:16
我在form1 里有一个dataGridView1 的modfiers都设置为了public 我在form1里用 MessageBox.Show(this.dataGridView1.CurrentRow.Cells[1].Value.ToString());有数据显示!
不过我用成
Form2 f2 = new Form2();
f2.Show(this);//把form1的引用传给form2

在form2里用:
Form1 f1 = new Form1();
string id = f1.dataGridView1.CurrentRow.Cells[1].Value.ToString(); //要报 :未将对象引用设置到对象的实例。 的错。 MessageBox.Show(id);


跪求各位高手帮忙看看什么问题!
初学者,谢谢.........
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinhl99 2008-12-02
  • 打赏
  • 举报
回复
在form2里用:
Form1 f1 = new Form1();
string id = f1.dataGridView1.CurrentRow.Cells[1].Value.ToString(); //要报 :未将对象引用设置到对象的实例。 的错。 MessageBox.Show(id);

这怎么可以呢?
Form1其实就是一个class,f1这个对象可没有帮你去绑定dataGridView1,也就是说你这样,其实dataGridView1并没有数据,
f1.dataGridView1.CurrentRow.Cells[1].Value 一定是为null的
llsen 2008-12-02
  • 打赏
  • 举报
回复
在form2里用:
Form1 f1 = new Form1();
string id = f1.dataGridView1.CurrentRow.Cells[1].Value.ToString(); //要报 :未将对象引用设置到对象的实例。 的错。 MessageBox.Show(id);

这里你重新实例化了一个form1 new
里面的datagridview未初始化的,没有数据源等
所以出现这个错误吧
whitechololate 2008-12-02
  • 打赏
  • 举报
回复
在构造器中把 form1的变量值传到form2中去
justindreams 2008-12-02
  • 打赏
  • 举报
回复
f2.Show(this);//把form1的引用传给form2
这句话是错的,Form.Show(IWin32Window owner)这个方法,里面的参数是指拥有此窗体的顶级窗口的对象,在要Form2中使用Form1的public字段的话,简单的做法,可以这样
在Form2中加入一个Form1类型的字段,假定为F1,构造函数中加入一个Form1类型的参数
Form2的构造器:
public Form2(Form1 F1)
{
//原有的内容,包括InitializeComponent();
this.F1=F1;
}

然后,再用的时候,就可以直接使用,this.F1.dataGridView1.CurrentRow.Cells[1].Value.ToString()
hernmmy 2008-12-02
  • 打赏
  • 举报
回复
不好意思,写错地方了,呵呵
在Form1里
Form2 f2 = new Form2(f1.dataGridView1.CurrentRow.Cells[1].Value.ToString());
f2.Show();//把form1的引用传给form2

在Form2里构造函数
string Cell=string.Empty;
public Form1(string cell)
{
Cell=cell
}

之后再就是你的:
MessageBox.Show(Cell);
flyjimi 2008-12-02
  • 打赏
  • 举报
回复
Form1 f1 = new Form1();
这一句你又重新设置了f1指向一个新实例化的对象。这就不是你刚才传进来的f1对象了。
hernmmy 2008-12-02
  • 打赏
  • 举报
回复
在Form2里
Form2 f2 = new Form2();
f2.Show(f1.dataGridView1.CurrentRow.Cells[1].Value.ToString());//把form1的引用传给form2

在Form1里构造函数
string Cell=string.Empty;
public Form1(string cell)
{
Cell=cell
}

之后再就是你的:
MessageBox.Show(Cell);
浮生若梦丶 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hulihui 的回复:]
Form1 f1 = new Form1(); // 这个语句多余
string id = f1.dataGridView1.CurrentRow.Cells[1].Value.ToString();
不需要新建f1,因为你在Form2 f2 = new Form2(this)已经获得了form1的引用,如果保存到字段form1,则可以直接使用string id = form1.dataGridView1.CurrentRow.Cells[1].Value.ToString();
[/Quote]
up
长沙三毛 2008-12-02
  • 打赏
  • 举报
回复
Form1 f1 = new Form1(); // 这个语句多余
string id = f1.dataGridView1.CurrentRow.Cells[1].Value.ToString();
不需要新建f1,因为你在Form2 f2 = new Form2(this)已经获得了form1的引用,如果保存到字段form1,则可以直接使用string id = form1.dataGridView1.CurrentRow.Cells[1].Value.ToString();
孤独侠客123 2008-12-02
  • 打赏
  • 举报
回复
你这哪里传递了?Show的话就到Form2里面了吗???

不是这样?
Form2 f2 = new Form2(this);
f2.Show();

然后在FOrm2里面有一个Form1的属性,在构造参数里面直接赋值.

你要判断一个是f1 == null ?
还是 f1.dataGridView1 == null
f1.dataGridView1.CurrentRow.Cells[1].Value == null


111,131

社区成员

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

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

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