ibcadmin 发表于 2012-12-16 14:41:08

Winform中窗体间如何传值

新手都会遇到的问题,在两个窗体之间,怎么样传值?比如一个用户登录以后,怎么样把该用户的信息传入到第二个窗体,我们先来讲解基本的几个方法,以后会用到实体类,到时候操作就更简单了。

方法一
在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去。代码如下:主窗体.cs


   public class frmMain:Form
   {
      ...
      frmControl controlForm=new frmControl(this);
      controlForm.Show();
    }
子窗体.cs

public class frmControl:Form//子窗体,用来控制主窗体的某些显示!
    {
         private frmMain mainForm;
         public frmControl(frmMain mainForm)
         {
            this.mainForm=mainForm;
         }
         private void button1_Click(object sender,EventArgs e)
         {
               frmMain.textBox1.Text=this.textBox1.Text;
               //把子窗体的文本框值传递给主窗体的文本框!
         }
   }
方法二
为了进一步降低窗体之间的耦合度,我们可以用委托来实现这个需求。代码如下:
主窗体.cs
// 主窗体给委托变量赋值就可以了:
    public partial class MainForm : Form
    {
      private ChildForm loginForm = new ChildForm();
      public MainForm()
      {
            InitializeComponent();
            loginForm.TitleChanged = new
                ChildForm.TitleChangedEventHandler(FormTitleChanged);
      }

      protected void FormTitleChanged(string title)
      {
            this.Text = title;
      }


      private void button1_Click(object sender, EventArgs e)
      {
            loginForm.Show();
      }
    }
子窗体.cs
public partial class ChildForm : Form
    {
      // 声明和定义委托
      public delegate void TitleChangedHandler(string title);
      public TitleChangedEventHandler TitleChanged;

      public ChildForm()
      {
            InitializeComponent();
      }   
      private void btn_Ok_Click(object sender, EventArgs e)
      {            
            if (TitleChanged != null)
                TitleChanged("Test Title"); //委托调用
            
      }
    }

chao2332601 发表于 2013-6-16 02:07:43

谢谢分享!!!

chao2332601 发表于 2013-6-16 04:55:30

谢谢分享!!!

飞/可爱朋 发表于 2014-5-7 23:53:35

:lol最方便的办法是在用户登录系统的时候把用户主键Id,作为一个全局变量存放在DBHelper中,其它子窗体在都可以直接调用这个DbHelper中的全局变量,方便,简单,无污染、、、、、仅供参考

ibcadmin 发表于 2014-5-8 00:26:14

飞/可爱朋 发表于 2014-5-7 15:53
最方便的办法是在用户登录系统的时候把用户主键Id,作为一个全局变量存放在DBHelper中,其它子窗体在都 ...

这种方式可以叫单例模式

chufa 发表于 2014-6-25 10:52:31

写的太简单了 表示不太懂!
页: [1]
查看完整版本: Winform中窗体间如何传值