none
表單間傳變數 RRS feed

  • 問題

  •  public partial class Form1 : Form
        {
            public int a;        //public int a=123;
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                a = 123;
                Form2 f = new Form2();
                f.ShowDialog();
                this.Close();
            }
        }

     

     public partial class Form2 : Form
        {
            Form1 f1 = new Form1();
            string test;
            public Form2()
            {
                InitializeComponent();
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                test = Convert.ToString(f1.a);
                textBox1.Text = test;
            }
        }

     

    如以上的程式碼,如果寫成紅色的,值可傳遞,但如果寫成藍色的,值無法傳遞,請問是少了什麼嗎?

    一定要先定義,才可傳值嗎?

    2007年9月15日 上午 09:59

解答

  • Code Snippet

        public partial class Form1 : Form
        {
            public int a;

            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                a = 123;
                Form2 f = new Form2();
                f.f1 = this;
                f.ShowDialog();
                Close();
            }
        }




    Code Snippet

        public partial class Form2 : Form
        {
            internal Form1 f1 = new Form1();
            private string test;

            public Form2()
            {
                InitializeComponent();
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                test = Convert.ToString(f1.a);
                textBox1.Text = test;
            }
        }


    把 Form1 物件變數傳到 Form2 內就可以了...
    2007年9月15日 上午 10:18

所有回覆

  • Code Snippet

     public partial class Form2 : Form
        {
            Form1 f1 = new Form1(); <--- 你又 new 了一個新的 Form1,當然沒值。
            string test;
            public Form2()
            {
                InitializeComponent();
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                test = Convert.ToString(f1.a);
                textBox1.Text = test;
            }
        }

     

     

     

    2007年9月15日 上午 10:11
  • Code Snippet

        public partial class Form1 : Form
        {
            public int a;

            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                a = 123;
                Form2 f = new Form2();
                f.f1 = this;
                f.ShowDialog();
                Close();
            }
        }




    Code Snippet

        public partial class Form2 : Form
        {
            internal Form1 f1 = new Form1();
            private string test;

            public Form2()
            {
                InitializeComponent();
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                test = Convert.ToString(f1.a);
                textBox1.Text = test;
            }
        }


    把 Form1 物件變數傳到 Form2 內就可以了...
    2007年9月15日 上午 10:18
  •  

    public partial class Form1 : Form
        {
            public int a;

            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                a = 123;
                Form2 f = new Form2(a);
                f.ShowDialog();
                Close();
            }
        }

     

    public partial class Form2 : Form
        {
            private string test;

            public Form2(int a)
            {
                InitializeComponent();

                textBox1.Text =Convert.ToString(a);
            }

           }

    2007年9月15日 下午 04:02
  • 謝謝各位大大的解答!

    2007年9月16日 上午 05:17
  • 不好意思,以上的問題已解決。但又發現新的問題

    就是我現在有三個form

    formA=>所有變數的來源,ex a b c d e

    formB=>使用formA中的某些變數,有和formC重覆 ,ex a,b,c

    formC=>使用formA中的某些變數,有和formB重覆 ,ex a,d,e

    會先從formA按下Button連到formB

    之後formB和formC會互連,b=>c or c=>b,絕對不會再回到formA

    formA => formB (變數傳遞ok)

    formA => formC (變數傳遞失敗)formA不會直接連到formC,而是由formB連到formC

    =>難道我要先將formC所需變數,存在formB再傳到formC嗎?有沒有更好的方法呢?

    formC=>fomrB(變數傳遞失敗)

    =>formB所需變數不見了…

    請問有沒有辦法可解決呢?還是有什麼辦法可讓formA的變數放在一個地方,讓formB,formC都可使用?

    程式是使用chhuang大大的寫法!

     

     

    2007年9月16日 上午 08:20