马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

Winform中窗体间如何传值

  [复制链接]
查看8269 | 回复5 | 2012-12-16 14:41:08 | 显示全部楼层 |阅读模式
新手都会遇到的问题,在两个窗体之间,怎么样传值?比如一个用户登录以后,怎么样把该用户的信息传入到第二个窗体,我们先来讲解基本的几个方法,以后会用到实体类,到时候操作就更简单了。

方法一

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

主窗体.cs
[C#] 纯文本查看 复制代码

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

子窗体.cs
[C#] 纯文本查看 复制代码
 
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
[C#] 纯文本查看 复制代码
 // 主窗体给委托变量赋值就可以了:
    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
[C#] 纯文本查看 复制代码
  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"); //委托调用
            
        }
    }

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
chao2332601 | 2013-6-16 02:07:43 | 显示全部楼层
谢谢分享!!!
chao2332601 | 2013-6-16 04:55:30 | 显示全部楼层
谢谢分享!!!
飞/可爱朋 | 2014-5-7 23:53:35 | 显示全部楼层
最方便的办法是在用户登录系统的时候把用户主键Id,作为一个全局变量存放在DBHelper中,其它子窗体在都可以直接调用这个DbHelper中的全局变量,方便,简单,无污染、、、、、仅供参考
ibcadmin | 2014-5-8 00:26:14 | 显示全部楼层
飞/可爱朋 发表于 2014-5-7 15:53
最方便的办法是在用户登录系统的时候把用户主键Id,作为一个全局变量存放在DBHelper中,其它子窗体在都 ...

这种方式可以叫单例模式
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
chufa | 2014-6-25 10:52:31 | 显示全部楼层
写的太简单了 表示不太懂!
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则