none
多表單處理 RRS feed

  • 問題

  • 想請問,若希望做成
    form1某些條件被滿足時,會產生一個form2表單,且其上包含TextBox與Button。當form2的button被按下時,form1執行動作(例如存取檔案)。
    若是上述的功能,該怎麼做呢?
    form1該如何知道form2 button是否被觸發?
    2009年12月22日 下午 08:08

解答

  • 目前使用showdialog已可完成目的,但不知是否還有其他方法呢:)
    //目的是希望create form2後,當使用者在form2的Textbox輸入內容並按下button,form2關閉而form1將輸入內容做寫入檔案之類的動作


    觀念上的做法
     1. 在  Form1 上建立一個相關聯的私有變數與公開屬性以便讓 Form2存取
       private m_txt;
       public String myTxt
            {
                get
                { return m_txt; }
                set
                { m_txt = value; }
            }
      2. 在Form2 上建立一個相關聯的私有變數與公開屬性, 以便存取 Form1的公開屬性
       private Form1 TopForm;
       public Form1 myTopFrom
            {
                get { return TopForm; }
                set { TopForm = value; }
            }
       3. 在 Form1程式碼中當建立Form2執行個體時將Form1執行個體本身指派給  Form2的myTopForm屬性
         private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
                frm2.myTopFrom = this;
                frm2.Show();
            }
       // 現在當你的Form2執行個體 (frm2)開啟時就可以存取 Form1執行個體的公開屬性

       4. 在Form2執行個體button.click 委派函式中將textBox1的值指派給 Form1執行個體的myTxt屬性
              private void button1_Click(object sender, EventArgs e)
            {
                TopForm.myTxt = textBox1.Text;
            }

        5.  所以當你在Form2執行個體中按下button1後, Form1執行個體的 m_txt變數內容就是Form2執行個體的textBox1.Text屬性值的內容了
       

        註1: 步驟2如果沒有特殊目的或是懶惰的因素也可以用 現有的Owner屬性替代, 不用另外建一個自訂屬性. 或是使用  Form. Show 方法 (IWin32Window) .
        註2: 學程式不要光抄程式碼, 要瞭解原理.
     
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月24日 上午 03:18
    版主

所有回覆

  • 恩...我不太確定是不是傳值問題。
    我的form1獲取form2資料是沒問題的。
    可是,它無法等form2的button按下後才執行後續動作,這部分是否有辦法能解決呢?

    2009年12月23日 上午 10:39
  • 等form2的button按下後,用委派的方式去讓form1的button也按下就行了
    2009年12月23日 上午 10:44
  • 在form2里获取form1对象,再对其进行操作!
    顺便问下什么操作?
    2009年12月23日 上午 11:17
  • 目前使用showdialog已可完成目的,但不知是否還有其他方法呢:)
    //目的是希望create form2後,當使用者在form2的Textbox輸入內容並按下button,form2關閉而form1將輸入內容做寫入檔案之類的動作

    2009年12月23日 下午 05:18
  • form1 :
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 obj = new Form2();
        if (obj.ShowDialog() == DialogResult.OK)
        {
            MessageBox.Show(obj.GetText);
        }
        obj.Dispose();
    }
    form2 :
    public string GetText
    {
    	get { return textBox1.Text; }
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
    	this.DialogResult = DialogResult.OK;
    }
    form1的MessageBox.Show的地方就是取得form2的TextBox值~
    2009年12月24日 上午 02:08
  • 目前使用showdialog已可完成目的,但不知是否還有其他方法呢:)
    //目的是希望create form2後,當使用者在form2的Textbox輸入內容並按下button,form2關閉而form1將輸入內容做寫入檔案之類的動作


    觀念上的做法
     1. 在  Form1 上建立一個相關聯的私有變數與公開屬性以便讓 Form2存取
       private m_txt;
       public String myTxt
            {
                get
                { return m_txt; }
                set
                { m_txt = value; }
            }
      2. 在Form2 上建立一個相關聯的私有變數與公開屬性, 以便存取 Form1的公開屬性
       private Form1 TopForm;
       public Form1 myTopFrom
            {
                get { return TopForm; }
                set { TopForm = value; }
            }
       3. 在 Form1程式碼中當建立Form2執行個體時將Form1執行個體本身指派給  Form2的myTopForm屬性
         private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
                frm2.myTopFrom = this;
                frm2.Show();
            }
       // 現在當你的Form2執行個體 (frm2)開啟時就可以存取 Form1執行個體的公開屬性

       4. 在Form2執行個體button.click 委派函式中將textBox1的值指派給 Form1執行個體的myTxt屬性
              private void button1_Click(object sender, EventArgs e)
            {
                TopForm.myTxt = textBox1.Text;
            }

        5.  所以當你在Form2執行個體中按下button1後, Form1執行個體的 m_txt變數內容就是Form2執行個體的textBox1.Text屬性值的內容了
       

        註1: 步驟2如果沒有特殊目的或是懶惰的因素也可以用 現有的Owner屬性替代, 不用另外建一個自訂屬性. 或是使用  Form. Show 方法 (IWin32Window) .
        註2: 學程式不要光抄程式碼, 要瞭解原理.
     
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月24日 上午 03:18
    版主