问题描述
第一段代码:publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){}publicstringstr="hfghh";privatevoidbutton1_Click(objectsender,EventArgse){Form2form2=newForm2();form2.Show();form2.Invalidate();}}publicpartialclassForm2:Form{publicForm2(){InitializeComponent();}Form1form1=newForm1();privatevoidForm2_Load(objectsender,EventArgse){}privatevoidForm2_Paint(objectsender,PaintEventArgse){MessageBox.Show(form1.str);//弹出来了MessageBox.Show对话窗口}}第二段代码:publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}publicDictionary<int,string>dic4=newDictionary<int,string>();privatevoidForm1_Load(objectsender,EventArgse){}privatevoidbutton1_Click(objectsender,EventArgse){Form2form2=newForm2();dic4.Add(1,"HaHa");dic4.Add(5,"HoHo");dic4.Add(3,"HeHe");dic4.Add(2,"HiHi");dic4.Add(4,"HuHu");form2.Show();form2.Invalidate();//重绘}}publicpartialclassForm2:Form{publicForm2(){InitializeComponent();}Form1form1=newForm1();privatevoidForm2_Load(objectsender,EventArgse){}privatevoidForm2_Paint(objectsender,PaintEventArgse){foreach(varpairinform1.dic4){MessageBox.Show(pair.Value);//为什么没弹出对话窗口?}}}问题:第二段代码的结构组成和第一段代码应该是一样的,为什么第二段代码不能弹出MessageBox.Show对话窗口呢?谢谢
解决方案
解决方案二:
你第二段代码中新new了一个form1这个form1的dic4是空的。因为没有执行button1_Click
解决方案三:
引用1楼lpingz的回复:
你第二段代码中新new了一个form1这个form1的dic4是空的。因为没有执行button1_Click
第一段代码还是new了一个form1啊,但为什么str没空呢?
解决方案四:
你可以调试下看看你的dic4的值
解决方案五:
引用2楼aw214的回复:
引用1楼lpingz的回复:你第二段代码中新new了一个form1这个form1的dic4是空的。因为没有执行button1_Click第一段代码还是new了一个form1啊,但为什么str没空呢?
你的str赋了初值了。而你的dic4初始化的时候没有数据。
解决方案六:
而且你的字典为空的话,根本执行不到messagebox.show。而第一个里面,就算str为空,也会show出messagebox来的。
解决方案七:
引用4楼lpingz的回复:
引用2楼aw214的回复:引用1楼lpingz的回复:你第二段代码中新new了一个form1这个form1的dic4是空的。因为没有执行button1_Click第一段代码还是new了一个form1啊,但为什么str没空呢?你的str赋了初值了。而你的dic4初始化的时候没有数据。
dic4初始化的时候没有数据,可是Add了得啊!!
解决方案八:
引用5楼lpingz的回复:
而且你的字典为空的话,根本执行不到messagebox.show。而第一个里面,就算str为空,也会show出messagebox来的。
为空指的是为空字符串!!字典为空是指count为0!!!你调试下,在那个click里面加个断点,然后在你的foreach(varpairinform1.dic4)处也加个断点,看看有没add。
解决方案九:
引用7楼lpingz的回复:
引用5楼lpingz的回复:你调试下,在那个click里面加个断点,然后在你的foreach(varpairinform1.dic4)处也加个断点,看看……
我设置过断点,click里面是Add了的,但是foreach处,就没有了,不知道为什么?我估计是字典为空了,但不知为何?
解决方案十:
等待答案
解决方案十一:
引用8楼aw214的回复:
引用7楼lpingz的回复:引用5楼lpingz的回复:你调试下,在那个click里面加个断点,然后在你的foreach(varpairinform1.dic4)处也加个断点,看看……我设置过断点,click里面是Add了的,但是foreach处,就没有了,不知道为什么?我估计是字典为空了,但不知为何?
这么说吧。创建form2的Form1的实例(假设叫A)和你在form2中new的form1的实例(假设叫B)是完全不同的。你在A的click中的向A的dic4赋值。然后创建form2的时候,创建了B,B的dic4是没有项的。