请大师看这个问题

aw214 2011-06-13 08:24:54
第一段代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}
public string str = "hfghh";
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
form2.Invalidate();
}
}

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
Form1 form1 = new Form1();
private void Form2_Load(object sender, EventArgs e)
{

}
private void Form2_Paint(object sender, PaintEventArgs e)
{
MessageBox.Show(form1.str); //弹出来了MessageBox.Show对话窗口
}
}





第二段代码:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Dictionary<int, string> dic4 = new Dictionary<int, string>();
private void Form1_Load(object sender, EventArgs e)
{

}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
dic4.Add(1, "HaHa");
dic4.Add(5, "HoHo");
dic4.Add(3, "HeHe");
dic4.Add(2, "HiHi");
dic4.Add(4, "HuHu");
form2.Show();
form2.Invalidate(); //重绘
}
}

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
Form1 form1 = new Form1();
private void Form2_Load(object sender, EventArgs e)
{

}
private void Form2_Paint(object sender, PaintEventArgs e)
{
foreach (var pair in form1.dic4)
{
MessageBox.Show(pair.Value); //为什么没弹出对话窗口?
}
}
}


问题:

第二段代码的结构组成和第一段代码应该是一样的,为什么第二段代码不能弹出MessageBox.Show对话窗口呢?

谢谢

...全文
108 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpingz 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aw214 的回复:]
引用 7 楼 lpingz 的回复:
引用 5 楼 lpingz 的回复:


你调试下,在那个click里面加个断点,然后在你的 foreach (var pair in form1.dic4)处也加个断点,看看……

我设置过断点,click里面是Add了的,但是foreach处,就没有了,不知道为什么?我估计是字典为空了,但不知为何?
[/Quote]

这么说吧。

创建 form2的Form1的实例(假设叫A) 和 你在form2中new的form1的实例(假设叫B) 是完全不同的。

你在A的click中的向A的dic4赋值。
然后创建form2的时候,创建了B,B的dic4是没有项的。
aw214 2011-06-13
  • 打赏
  • 举报
回复
等待答案
aw214 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lpingz 的回复:]
引用 5 楼 lpingz 的回复:


你调试下,在那个click里面加个断点,然后在你的 foreach (var pair in form1.dic4)处也加个断点,看看……
[/Quote]
我设置过断点,click里面是Add了的,但是foreach处,就没有了,不知道为什么?我估计是字典为空了,但不知为何?
lpingz 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lpingz 的回复:]
而且你的字典为空的话,根本执行不到messagebox.show。

而第一个里面,就算str为空,也会show出messagebox来的。
[/Quote]
为空指的是为空字符串!!

字典为空是指 count为0!!!

你调试下,在那个click里面加个断点,然后在你的 foreach (var pair in form1.dic4)处也加个断点,看看有没add。
aw214 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lpingz 的回复:]
引用 2 楼 aw214 的回复:
引用 1 楼 lpingz 的回复:
你第二段代码 中 新new了一个form1 这个form1的dic4是空的。因为没有执行button1_Click

第一段代码还是new了一个form1啊,但为什么str 没空呢?


你的str赋了初值了。而你的dic4初始化的时候没有数据。
[/Quote]
dic4初始化的时候没有数据,可是Add了得啊!!
lpingz 2011-06-13
  • 打赏
  • 举报
回复
而且你的字典为空的话,根本执行不到messagebox.show。

而第一个里面,就算str为空,也会show出messagebox来的。
lpingz 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aw214 的回复:]
引用 1 楼 lpingz 的回复:
你第二段代码 中 新new了一个form1 这个form1的dic4是空的。因为没有执行button1_Click

第一段代码还是new了一个form1啊,但为什么str 没空呢?
[/Quote]

你的str赋了初值了。而你的dic4初始化的时候没有数据。
lpingz 2011-06-13
  • 打赏
  • 举报
回复
你可以调试下看看 你的dic4的值
aw214 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lpingz 的回复:]
你第二段代码 中 新new了一个form1 这个form1的dic4是空的。因为没有执行button1_Click
[/Quote]
第一段代码还是new了一个form1啊,但为什么str 没空呢?
lpingz 2011-06-13
  • 打赏
  • 举报
回复
你第二段代码 中 新new了一个form1 这个form1的dic4是空的。因为没有执行button1_Click

111,125

社区成员

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

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

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