情况是这样的
我有一个主窗体和一个小窗体
当我在主窗体触发一个事件的时候 弹出小窗体,我用的是showdialog()方法
我先修改了小窗体的构造函数,带2个参数,然后主窗体触发时实例化小窗体 并传入参数。这是没有问题的现在问题是 当我在小窗体中处理完时间,按 确定 按钮 后  需要将一些数据传回到主窗体。我不想将小窗体中需要传回的数据设为public 
但是修改主窗体构造函数的话,因为我用的是showdialog()方法显示小窗体,这样我不能在按 确定后 重新实例化 主窗体请教一下 这时候 比较好的方法是什么?PS: 我语言表达能力不太好,可能显得啰嗦- -

解决方案 »

  1.   

    你可以在你的小窗体里面添加一个父窗体类型的属性,在小窗体showdialog之前,构造之后,将父窗体的this传给小窗体的这个属性,然后再小窗体的Closing事件里面把小窗体这个属性(这个属性就是父窗体的实例)的数据设置为小窗体要传递给父窗体的数据.
      

  2.   

    能够具体一点吗?
    比如我设定
    public delegate void mydelegate(string str);
    public void update(string str)
    {
        我需要传递的str = str;
    }是这样吗?
      

  3.   


    BigFrm:
    using System.Windows.Forms;namespace FrmChange
    {
        public partial class BigFrm : Form
        {
            private int mPara1;        private int mPara2;        public int Para1
            {
                get
                {
                    return mPara1;
                }
                set
                {
                    mPara1 = value;
                }
            }        public int Para2
            {
                get
                {
                    return mPara2;
                }
                set
                {
                    mPara2 = value;
                }
            }        public BigFrm()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, System.EventArgs e)
            {
                SmallFrm smallfrm = new SmallFrm(mPara1, mPara2);
                smallfrm.Parent = this;
                if (smallfrm.ShowDialog() == DialogResult.OK)
                {
                    // 这时候这个类里面的mPara1与mPara2已经是SmallFrm传回来的值
                    MessageBox.Show(string.Format("mPara1: {0}, mPara2: {1}", mPara1, mPara2));
                }
            }
        }
    }
    SmallFrm
    using System.Windows.Forms;
    using System;namespace FrmChange
    {
        public partial class SmallFrm : Form
        {
            private int mPara1ToBigFrm;
            private int mPara2ToBigFrm;
            private BigFrm mParent;        public BigFrm Parent
            {
                get
                {
                    return mParent;
                }
                set
                {
                    mParent = value;
                }
            }
            public SmallFrm()
            {
                InitializeComponent();
            }
            public SmallFrm(int para1, int para2)
                : this()
            {
                mPara1ToBigFrm = para1;
                mPara2ToBigFrm = para2;            textBox1.Text = mPara1ToBigFrm.ToString();
                textBox2.Text = mPara2ToBigFrm.ToString();
            }
            protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
            {
                base.OnClosing(e);
                mPara1ToBigFrm = Convert.ToInt32(textBox1.Text);
                mPara2ToBigFrm = Convert.ToInt32(textBox2.Text);
                Parent.Para1 = mPara1ToBigFrm;
                Parent.Para2 = mPara2ToBigFrm;
            }
        }
    }