第一段代码:
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对话窗口呢?谢谢

解决方案 »

  1.   

    你第二段代码 中 新new了一个form1 这个form1的dic4是空的。因为没有执行button1_Click
      

  2.   

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

  3.   

    你可以调试下看看  你的dic4的值
      

  4.   


    你的str赋了初值了。而你的dic4初始化的时候没有数据。
      

  5.   

    而且你的字典为空的话,根本执行不到messagebox.show。而第一个里面,就算str为空,也会show出messagebox来的。
      

  6.   

    dic4初始化的时候没有数据,可是Add了得啊!!
      

  7.   

    为空指的是为空字符串!!字典为空是指  count为0!!!你调试下,在那个click里面加个断点,然后在你的 foreach (var pair in form1.dic4)处也加个断点,看看有没add。
      

  8.   

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

  9.   


    这么说吧。创建 form2的Form1的实例(假设叫A)  和 你在form2中new的form1的实例(假设叫B) 是完全不同的。你在A的click中的向A的dic4赋值。
    然后创建form2的时候,创建了B,B的dic4是没有项的。