public partial class Form1: Form
    {
        public Form1()
        {
            InitializeComponent();
        }        public static int i = 0;        private void button1_Click(object sender, EventArgs e)
        {
            i++;
            Form2 fm = new Form2();
            fm.Show();
        }
    }    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }        public static int j = Form1.i;        private void Form4_Load(object sender, EventArgs e)
        {
            textBox1.Text = j.ToString();
        }
    }
点击Form1的button,form2显示1,关掉再点击还是1
.......
经过断点了解,form1没有问题i的值在不断增加,但是form2的 【public static int j = Form1.i】只执行一次,以后在不执行,怎么办?

解决方案 »

  1.   

    我主要想问问为什么会这样,能不能让它执行。解决也好办,放到formload里,没事了。但是代码量太大了,麻烦!
      

  2.   

    改成这样就行了:
      public partial class Form1: Form
        {
            public Form1()
            {
                InitializeComponent();
            }        public int i = 0;        private void button1_Click(object sender, EventArgs e)
            {
                i++;
                Form2 fm = new Form2(i);
                fm.Show();
            }
        }
    public partial class Form2 : Form
        {
            public Form2(int m)
            {
                InitializeComponent();
                j=m;
            }        public int j =0;        private void Form2_Load(object sender, EventArgs e)
            {
                textBox1.Text = j.ToString();
            }
        }
      

  3.   

    我只给你解决了form2中j值变化的问题,别的都是你自己的代码阿!
      

  4.   

    private void button1_Click(object sender, EventArgs e)
            {
                i++;
                Form2 fm = new Form2();
                From2.j=i;
                fm.Show();
            }
      

  5.   

    C# code
        public partial class Form1: Form
        {
            public Form1()
            {
                InitializeComponent();
            }        public static int i = 0;        private void button1_Click(object sender, EventArgs e)
            {
                i++;
                Form2 fm = new Form2();
                fm.Show();
            }
        }
    C# code
        public partial class Form2 : Form
        {
            public static int j;
            public Form2()
            {
                InitializeComponent();
                j = Form1.i;
            }        private void Form2_Load(object sender, EventArgs e)
            {
                textBox1.Text = j.ToString();
            }
        }
      

  6.   


        public partial class Form1: Form
        {
            public Form1()
            {
                InitializeComponent();
            }        public static int i = 0;        private void button1_Click(object sender, EventArgs e)
            {
                i++;
                Form2.j++;
                Form2 fm = new Form2();
                fm.Show();
            }
        }
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        public static int j = 0;        private void Form4_Load(object sender, EventArgs e)
            {
                textBox1.Text = j.ToString();
            }
        }
      

  7.   


            private void button1_Click(object sender, EventArgs e)
            {
                //i++;
                //Form2.j++;
                Form2.j = ++i;
                Form2 fm = new Form2();
                fm.Show();
            }
      

  8.   

    经过断点了解,form1没有问题i的值在不断增加,但是form2的 【public static int j = Form1.i】只执行一次,我刚搞明白这个问题,根本原因是:无论对一个类创建多少个实例,它的静态成员都只有一个副本
    所以它只执行一次,其实方法很简单,只要把static去掉就可以,改成public int j=Form1.i,这样每次实例化FORM2的时候就会执行了
      

  9.   

    真是巧啊,我也是刚刚发现在自己写的程序里static成员只执行一次,然后查看MSDN的文档才明白的,静态成员只有一个副本,所以只执行一次,要想每次都执行,把static去掉就可以。