none
請問form之間互傳資料的問題 RRS feed

  • 問題

  • 請問一個有關form之間互傳資料的問題,From1程式如下: 

            Form2 form = new Form2();
            private void button1_Click(object sender, EventArgs e)
            {
                textBox1.Text = form.textBox1.Text;
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                form.Show();
            }

            private void button2_Click(object sender, EventArgs e)
            {
                form.Show();
            }

    Form2上有個textBox1可以輸入資料:

    問題1:

    若是想要在Form2上設一個button讓Form1上的textBox輸入的資料可以傳到Form2上的textBox上請問要怎麼做啊?因為new一個form的話產生一個新的form這樣你的memory是不同的就無法存取到我想要的資料

    問題2:

    若是Form2被我關掉了,理所當然button2的作法就有問題了,想請問有辦法解決若是form2被我關掉了,但是還可以再產生出一個相同記憶體位置的form2嗎?

    2006年7月17日 上午 09:30

解答

  • HI,

    您可以不需要做到傳Form1物件, 您可以在Form2類別中宣告一個型態是Form1的變數:

    public class Form2

    {

        public Form1 f1=null;

    }

    然後在建Form2物件的時候:

    Form2 f2=new Form2();

    f2.f2=this;

    f2.Show();

    Form2就可以使用到Form1類別的物件f1

    tihs

    2006年7月19日 下午 01:49

所有回覆

  • HI,

    問題1:

    若是想要在Form2上設一個button讓Form1上的textBox輸入的資料可以傳到Form2上的textBox上請問要怎麼做啊?因為new一個form的話產生一個新的form這樣你的memory是不同的就無法存取到我想要的資料

    您可以在Form2類別中宣告一個Friend範圍的變數, 由Form1將TextBox的內容填入變數, Form2視窗就可以用到了. 例如:

    Form2 form = new Form2();

    private void button2_Click(object sender, EventArgs e)
    {

        form.變數=textBox1.Text;
        form.Show();
    }

    問題2:

    若是Form2被我關掉了,理所當然button2的作法就有問題了,想請問有辦法解決若是form2被我關掉了,但是還可以再產生出一個相同記憶體位置的form2嗎?

    Form2被關閉沒有關係, 只要Form2類別的變數還沒有死就還有機會拿到Form2視窗上的內容

    tihs

    2006年7月17日 下午 12:32
  • 1.若是用frined的確是可以做到,不過我比較想問的是若是From1沒有button等去觸發該

    "form.變數=textBox1.Text;" 動作?而是想要在Form2裡的button中做類似直接存取form1中的textBox.text,那這樣有辦法做到嗎?或是有其他方法可以傳Form這個物件 

    2006年7月18日 上午 01:44
  • HI,

    如果是C#語言, 您可把Form1上面的TextBox的Modifier屬性設定為Internal(即VB.NET的Friend), 就可以被Form1所取用了

    tihs

    2006年7月18日 上午 10:03
  • 大大你應該是說可以被form2使用吧,那個屬性的設定我知道如何使用,不過有個問題就是form1中new出一個form2,並且show form2,那在form2中要抓到form1的資料一定要把form1傳過來才行,這個動作我不知道怎麼做?若是在form2中再產生一個form1才去取他的值,這樣就沒有辦法真正抓到form1所需要的值了
    2006年7月19日 上午 06:23
  • 這個問題我解決了...

    就是在宣告new form的時候將form1表單傳入建構元,並在form2中新增一個建構元接收form1的物件即可.

    2006年7月19日 上午 07:51
  • HI,

    您可以不需要做到傳Form1物件, 您可以在Form2類別中宣告一個型態是Form1的變數:

    public class Form2

    {

        public Form1 f1=null;

    }

    然後在建Form2物件的時候:

    Form2 f2=new Form2();

    f2.f2=this;

    f2.Show();

    Form2就可以使用到Form1類別的物件f1

    tihs

    2006年7月19日 下午 01:49