比较窗体调用的两种方法哪种好?(1.用事件 2.在窗体2中定义窗体1的成员)
------------------------------------------------------------------------
看了一些帖子,好象就是这两种方法了。(还有一种用静态成员的方法,不在讨论之列)
下面,分别贴出两个窗体的代码,大家认为,哪种方式更好些呢?方法1:用事件namespace atmp
{
    public partial class Form1 : Form
    {
        Form2 frm2;
        public Form1()
        {
            InitializeComponent();
        }        void MainFormShow()
        {
            txt1.Text = frm2.strForm2;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            frm2 = new Form2();
            frm2.myrefresh+=new EventHandler(
                        (object sender1, EventArgs e1) =>
                        { MainFormShow(); });
            //frm2.ShowDialog();
            frm2.Show();
        }
    }
}namespace atmp
{
    public partial class Form2 : Form
    {        public event EventHandler myrefresh;
        public string strForm2;        public Form2()
        {
            InitializeComponent();
        }        //刷新另一个窗体的文本框
        private void button1_Click(object sender, EventArgs e)
        {
            this.strForm2 = "qqqqqqqqqqqqqqqqq";
            myrefresh(null,null);
        }        private void Form2_Load(object sender, EventArgs e)
        {        }
    }
}
方法2:在窗体2中定义窗体1的成员namespace c1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.frm1 = this;
            frm2.Show();
        }        public void setvalue(string str1)
        {
            this.textBox1.Text = str1;
        }
    }
}
namespace c1
{
    public partial class Form2 : Form
    {
        public Form1 frm1;
        public Form2()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            this.frm1.setvalue("adsfasdfasdf");
        }
    }
}

解决方案 »

  1.   

    对象间通信问题,当然Event好,这里也没有可比性,第二种方法太不符合低偶了
      

  2.   

    还有一种就是在new的时候传值
    form1 a =new form1(要传的值)
      

  3.   

    可以定义一个公共静态类,然后在这个类里实例化所以的Form 窗体(也需要是静态的)。
    如果调用的时候直接类名.要调用的窗体名称。
    这样省的频繁的实例化了。
      

  4.   


    如果你就是整天纠结着两个Form,那么当然看不到稍微高层一点的目的。对于设计者和管理者,很简单,Form2并不像当然地依赖于Form1,而是有事通知所有客户。
      

  5.   

    如果你遇到了几十个不同种类的Form,几百个或者更多的实例,那么有一点基本的设计概念,才能让系统整体代码更少、效率更高。家具上上非常简洁、高效的榫卯结构,其接口必须用心设计,那些连接口都想胡乱捆绑一下就算了的人怎么可能在整体上简单高效呢?