none
Form可以使用別的Form的方法嗎? RRS feed

  • 問題

  • 各位前輩  您好:

     

    我有兩個視窗,我嘗試要form2可以使用到form1的方法,
    可是我怎麼試都沒辦法,以下是我的一個小小測試程式碼,
    希望前輩指引!

    我這個程式是用instance來做的,我的form1按下button1開啟form2後,
    然後再按下form2的button1就引用form1的test()這個方法,

    可是這樣我會錯,不知道為什麼?

    程式碼:

    Form1

     

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace DeviceApplication3
    {
        public partial class Form1 : Form
        {

            public static Form1 instance = null;

            public static Form1 Instance
            {
                get
                {
                    if (null == instance)
                    {
                        instance = new Form1();
                    }
                    return instance;
                }
            }


            public Form1()
            {
                InitializeComponent();
            }

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

            public void test()
            {
                this.label1.Text = "hello!!";
                this.label2.Text = "hi!!";
            }
        }
    }

     

    ------------------------------------------------------------------------------------------------------------------------------------------------------

    Form2

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace DeviceApplication3
    {
        public partial class Form2 : Form
        {

            public static Form2 instance = null;

            public static Form2 Instance
            {
                get
                {
                    if (null == instance)
                    {
                        instance = new Form2();
                    }
                    return instance;
                }
            }

            public Form2()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Form1.instance.test();
            }
        }
    }

     

    請前輩解惑.......

    小弟使用  VS 2005 C# 開發......

     

     

    2007年9月11日 下午 06:05

解答

  • Form1

     

    Code Snippet

    using System;
    using System.Windows.Forms;

     

    namespace DeviceApplication3
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

     

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.f1Obj = this;
                f2.ShowDialog();

            }

     

            public void test()
            {
                label1.Text = "hello!!";
                label2.Text = "hi!!";
            }
        }
    }

     

     

    Form2

     

    Code Snippet

    using System;
    using System.Windows.Forms;

     

    namespace DeviceApplication3
    {
        public partial class Form2 : Form
        {
            internal Form1 f1Obj = null;

     

            public Form2()
            {
                InitializeComponent();
            }

     

            private void button1_Click(object sender, EventArgs e)
            {
                if (f1Obj != null)
                {
                    f1Obj.test();
                }
            }
        }
    }

     

     

    可以去 Google 查詢兩個表單互相傳值文章...可以更加了解....

     

    2007年9月12日 上午 01:23
  • Form2.Instance.ShowDialog();
    把這段改成

    Form2.Instance.Show();

     

    應該就可以了。

     

    但是,我不建議兩個表單彼此參照呼叫對方的method,這樣的作法,表單彼此之間的關係太緊密,程式的維護及修改不易。

     


     

    2007年9月12日 上午 02:11

所有回覆

  • Form1

     

    Code Snippet

    using System;
    using System.Windows.Forms;

     

    namespace DeviceApplication3
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

     

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.f1Obj = this;
                f2.ShowDialog();

            }

     

            public void test()
            {
                label1.Text = "hello!!";
                label2.Text = "hi!!";
            }
        }
    }

     

     

    Form2

     

    Code Snippet

    using System;
    using System.Windows.Forms;

     

    namespace DeviceApplication3
    {
        public partial class Form2 : Form
        {
            internal Form1 f1Obj = null;

     

            public Form2()
            {
                InitializeComponent();
            }

     

            private void button1_Click(object sender, EventArgs e)
            {
                if (f1Obj != null)
                {
                    f1Obj.test();
                }
            }
        }
    }

     

     

    可以去 Google 查詢兩個表單互相傳值文章...可以更加了解....

     

    2007年9月12日 上午 01:23
  • Form2.Instance.ShowDialog();
    把這段改成

    Form2.Instance.Show();

     

    應該就可以了。

     

    但是,我不建議兩個表單彼此參照呼叫對方的method,這樣的作法,表單彼此之間的關係太緊密,程式的維護及修改不易。

     


     

    2007年9月12日 上午 02:11