none
窗体间传值并刷新 RRS feed

  • 问题

  • 问题假设:
    目前有三个窗体,母窗体和两个子窗体。
    母窗体为A,两个子窗体分别为B、C。
    现在要实现的功能是打开B子窗体,单击B子窗体上的一个指定TextBox控件,弹出C子窗体(必须在母窗体中),然后选择C子窗体中任意一条记录后,C子窗体自动关闭,同时将选择的记录值传递给B子窗体中的TextBox控件,并让B子窗体中的TextBox执行记录查找。由于我是新手,不懂如何实现。请各位有经验的兄弟姐妹不吝赐教。谢谢了。

    2009年12月9日 5:27

答案

  • 你好!
        

    在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了:
       public class frmMain:Form
       {
            ...
            frmControl controlForm=new frmControl(this);
            controlForm.Show();
        }

        public class frmControl:Form  //子窗体,用来控制主窗体的某些显示!
        {
             private frmMain mainForm=null;
             public frmControl(frmMain mainForm)
             {
                  this.mainForm=mainForm;
              }
              private void button1_Click(object sender,EventArgs e)

                   {

                               frmMain.textBox1.Text=this.textBox1.Text;  //把子窗体的文本框值传递给主窗体的文本框!

                   }


         }


    周雪峰
    • 已标记为答案 YiChun Chen 2009年12月10日 10:19
    2009年12月9日 5:40
    版主
  • 方法是类似的,都可以通过构造函数来传值啊!
    周雪峰
    • 已标记为答案 YiChun Chen 2009年12月10日 10:19
    2009年12月9日 6:33
    版主

全部回复

  • 你好!
        

    在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了:
       public class frmMain:Form
       {
            ...
            frmControl controlForm=new frmControl(this);
            controlForm.Show();
        }

        public class frmControl:Form  //子窗体,用来控制主窗体的某些显示!
        {
             private frmMain mainForm=null;
             public frmControl(frmMain mainForm)
             {
                  this.mainForm=mainForm;
              }
              private void button1_Click(object sender,EventArgs e)

                   {

                               frmMain.textBox1.Text=this.textBox1.Text;  //把子窗体的文本框值传递给主窗体的文本框!

                   }


         }


    周雪峰
    • 已标记为答案 YiChun Chen 2009年12月10日 10:19
    2009年12月9日 5:40
    版主
  • 在B窗体中,打开C窗体
    Form2 是c窗体
                 Form2 f2 = new Form2();
                if ( f2.ShowDialog()==DialogResult.OK)
                {
                    textBox1.Text = f2.textBox1.Text;//textBox1的访问属性设为public
                }
    努力+方法=成功
    2009年12月9日 5:50
  • 版主你弄错了,我是想把C子窗体的值传递给B子窗体,不是传给主窗体

    2009年12月9日 6:11
  • 方法是类似的,都可以通过构造函数来传值啊!
    周雪峰
    • 已标记为答案 YiChun Chen 2009年12月10日 10:19
    2009年12月9日 6:33
    版主
  • 谢谢你们的帮助,但是你们讲的都太高深了,我只是个初学者,看不懂你们讲的到底该怎么做。是不是可以说得通俗一些。谢谢了。
    2009年12月11日 2:55
  • 这里面的确是需要用一些技巧的,你参考一下我上面的实例,说的比较详细!
    如果还是有疑问,你可以说说你哪里不明白,我们可以继续交流啊!没有关系的!
    周雪峰
    2009年12月11日 4:08
    版主