none
子視窗呼叫父視窗函式 RRS feed

  • 問題

  • 各位前輩,我有個表單間呼叫函式的問題,我另外寫一個簡單程式來描述我遇到的問題:

    我的主表單為Fom1,子視窗為SettingForm

    當我把子視窗SettingForm關掉時,我要在主視窗的textbox裡秀ok字串

    Form1程式

            public Form1()
            {
                InitializeComponent();
            }
            SettingForm SettingFormF = new SettingForm();

            private void button1_Click(object sender, EventArgs e)
            {
                SettingFormF.ShowDialog();
            }

            public void test()
            {
                textBox1.Text = "ok";
            }

    SettingForm程式

            public SettingForm()
            {
                InitializeComponent();
            }

            private void SettingForm_FormClosed(object sender, FormClosedEventArgs e)
            {
                Form1 FormF = new Form1();
                FormF.test();
            }

    但我關閉子視窗SettingForm的時候,並不會秀出ok字串,我先請問各位前輩我這樣寫的問題是出在哪?


    • 已編輯 rcgrcg 2014年9月29日 上午 10:35
    2014年9月29日 上午 10:09

解答

  •  你在 SettingForm 裡的 Closed 事件是製造一個新的 Form1  Instance 出來.

    你可以改成以下就會發現了

    Form1 FormF= new Form1();

    FormF.Show();

    FormF.Test();

    如果你想要在兩個 Form 交換或呼叫某些東西, 請參考

    老調重彈 -- 再談 Windows Form 程式視窗互相傳值(1)

    老調重彈 -- 再談 Windows Form 程式視窗互相傳值(2)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年9月29日 下午 12:11
    版主
  • 您要使用原先已顯示的Form1, 而不是建立新的Form1物件:

    1. 在SettingsForm類別中宣告:

    Form1 f=null;

    2. 顯示SettingsForm時:

    private void button1_Click(object sender, EventArgs e)
            {

                f=this; 

                SettingFormF.ShowDialog();
            }

    3. 修改SettingsForm的FormClosing事件處理程式

    private void SettingForm_FormClosed(object sender, FormClosedEventArgs e)
            {
                 f.test();
            }

    2014年9月30日 上午 04:15

所有回覆

  •  你在 SettingForm 裡的 Closed 事件是製造一個新的 Form1  Instance 出來.

    你可以改成以下就會發現了

    Form1 FormF= new Form1();

    FormF.Show();

    FormF.Test();

    如果你想要在兩個 Form 交換或呼叫某些東西, 請參考

    老調重彈 -- 再談 Windows Form 程式視窗互相傳值(1)

    老調重彈 -- 再談 Windows Form 程式視窗互相傳值(2)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年9月29日 下午 12:11
    版主
  • 您要使用原先已顯示的Form1, 而不是建立新的Form1物件:

    1. 在SettingsForm類別中宣告:

    Form1 f=null;

    2. 顯示SettingsForm時:

    private void button1_Click(object sender, EventArgs e)
            {

                f=this; 

                SettingFormF.ShowDialog();
            }

    3. 修改SettingsForm的FormClosing事件處理程式

    private void SettingForm_FormClosed(object sender, FormClosedEventArgs e)
            {
                 f.test();
            }

    2014年9月30日 上午 04:15
  • 感謝各位前輩指點迷津,問題已解決,感恩
    • 已編輯 rcgrcg 2014年10月2日 上午 02:12
    2014年10月2日 上午 01:04