首页 新闻 会员 周边 捐助

C#窗口间互传值问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-11-07 21:20

我在窗口1用一按钮打开窗口2,在窗口2填好数据后,按下一按钮将窗口2的数据传到窗口1并在窗口1并关闭窗口2,代码该怎么写?

窗口1的按钮

 private void button9_Click(object sender, EventArgs e)
        {
            Form6 f6 = new Form6();
            f6.ShowDialog();
                textBox10.Text = _st;
                textBox11.Text = _st1;
                comboBox3.Text = _st3;
                comboBox4.Text = _st2;

//红色的地方木有数据显示出来
        }

窗口2按钮 :

 private void button6_Click(object sender, EventArgs e)
        {
            Form7 f7 = new Form7();
            f7.st = textBox1.Text;
            f7.st1 = textBox2.Text;
            f7.st2 = comboBox1.Text;
            f7.st3 = comboBox2.Text;

            this.Hide();  
        }

求高手指导该怎么改,急啊

辉笑的主页 辉笑 | 初学一级 | 园豆:86
提问于:2012-11-06 20:39
< >
分享
最佳答案
0

用委托和事件来实现,Form2定义一个事件,Form1在打开Form2的时候得到From2的实例并注册Form2的事件.

void MyEvent(object sender,MyEventArgs e)

{

将参数通过 sender或 e 传到Form1。

}

相关代码如下:

Form2代码

public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public delegate void MyDelegate(object sender, EventArgs e);
        public event MyDelegate MyEvent;

        private void button1_Click(object sender, EventArgs e)
        {
            if (MyEvent != null)
            {
                sender = "abc"; //这就是要传的参数,也可以自定义e来穿参数,一般都是自定义e 。sender穿对象本身
                MyEvent(sender, new EventArgs());

                this.Close();
            }
        }
    }

 

From1代码

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

      
        private void button3_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();

 f2.MyEvent += new Form2.MyDelegate(f2_MyEvent);
            DialogResult result = f2.ShowDialog();

                     }

        void f2_MyEvent(object sender, EventArgs e)
        {
            string temp = sender.ToString();//这是获得你传的参数
        }

    }

收获园豆:10
小兵仔 | 小虾三级 |园豆:1240 | 2012-11-07 10:38
其他回答(6)
0

用Ajax数据回传

速速 | 园豆:218 (菜鸟二级) | 2012-11-06 20:55
0

new Form6的时候将自己传进去:new Form(this),后面的应该清楚了吧

向往-SONG | 园豆:4853 (老鸟四级) | 2012-11-06 21:32

我是要在FORM6中显示FORM7传过来的值

支持(0) 反对(0) 辉笑 | 园豆:86 (初学一级) | 2012-11-06 22:21

@辉笑: 

一个意思,new "窗口2"的时候把"窗口1(this)"传进去,在"窗口2"中设置“窗口1”中的控件的值就是了

支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-11-06 23:10
0

使用委托实现,form1中定义一个方法用来改变form1中的内容,在form2里定义一个委托变量,然后在form1中对form2初始化的时候,对委托变量赋值,在form2的关闭事件中调用这个方法就行了,不明白的话问。

轻狂の书生 | 园豆:1042 (小虾三级) | 2012-11-06 21:47
0

两种方法妥妥的,

1 定义一个都能访问到的静态变量

2 给 From6 添加一个构造函数,把要用的值在new 的时候传进去。

炭炭 | 园豆:190 (初学一级) | 2012-11-06 22:18

我是要在FORM6中显示FORM7传过来的值

支持(0) 反对(0) 辉笑 | 园豆:86 (初学一级) | 2012-11-06 22:21
0

窗口2作为窗口1的字窗口,然后向父窗口传值。

//窗口1打开窗口2的按钮函数
private void button1_Click(object sender, EventArgs e)
        {
            Form2 fm2 = new Form2();
            fm2.Owner = this;
            fm2.ShowDialog();
        }
//窗口2向窗口1回传数据,假定在窗口2中的TextBox输入数据,在Form1的Label中显示数据
private void buttonOK_Click(object sender, EventArgs e)
        {
            Form1 fm1 = new Form1();
            fm1 = (Form1)this.Owner;
    string data = textBox1.Text;
    fm1.label1.Text = data;
            this.Close();
        }
飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2012-11-06 22:51
0

直接在构造函数中传进去吧,两个窗口是不同的类,成员变量不能共享的...

鱼-潜底 | 园豆:242 (菜鸟二级) | 2012-11-06 23:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册