C#winform多个窗体之间的传值问题,解决方案


前言

提示:这一节我们学习C#不同的窗体传值问题

例如:在登录窗体输入用户的账号和密码,在后台查询数据库之后,查询正确后,并返回用户的信息,并在用户信息窗体显示用户的信息等操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、逻辑思路

第一步 :用户登录,输入账号和密码
第二步:根据输入的账号和密码在数据库查询
第三步:创建一个类(Result),若查询成功,将用户的一些基本信息用类的属性保存,或只存用户主键,若查询不到则返回错误信息。
第四步:查询失败弹框提醒,成功则进入主界面,并进行窗体传值操作,根据传过来的用户主键查询返回用户信息,并将用户的基本信息显实出来。

二、使用步骤

1.第一步

sql表, 主键为tel

在这里插入图片描述

登录窗体

在这里插入图片描述

登录按钮绑定事件代码如下(示例):

 //创建对象
        yyl_mysql sql = new yyl_mysql();
        Result result = new Result();

        private void button1_Click(object sender, EventArgs e)
        {
            //接收 LoginUser方法返回的用户信息,返回类型Result
            result = sql.LoginUser(textBox_tel.Text, textBox_password.Text);

            //判断是否查找
            if(result.F)  //true: 查找成功
            {
                //使用构造方法传值,在构造方法中传如对象result就实现了传值,
                //需在对应的窗体接收值,不然会报错
                UserMessage main = new UserMessage(result);

                //窗体调用
                main.ShowDialog();
            }
            else
            {
                //弹框显示错误信息
                MessageBox.Show(result.Error);
            }
        }

2.第二步

sql方法
提示:返回的类型是Result

代码如下(示例):

 //登录用户
        public Result LoginUser(string tel, string password)//接收账号和密码
        {
            Result result = new Result();
            MySqlConnection con = new MySqlConnection(str);
            MySqlCommand cmd = new MySqlCommand();

            try
            {
                con.Open();
                cmd.Connection = con;
                cmd.CommandText = "select * from tb_user where tel=@tel and password=@password "; //表的字段名=@新参数名

                cmd.Parameters.Add(new MySqlParameter("tel", tel));
                cmd.Parameters.Add(new MySqlParameter("password", password));

                MySqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    result.F = true;
                    //这里的Result类成员变量存储,在登录界面的时候可以传值到新的界面

                    result.Tel = reader["tel"].ToString();
                    result.Error = "成功查找到用户";

                }
                else
                {
                    result.F = false;
                    result.Tel = "";
                    result.Error = "查找失败!没有此用户......";
                }

            }
            catch (Exception ex)
            {
                result.F = false;
                result.Tel = "";
                result.Error = ex.Message;
            }
            finally
            {
                con.Close();
            }
            return result;
        }

3.第三步

1: 创建Result保存用户的主键及其他信息,我这里选择只保存主键(tel)
2: 更改类的作用范围为public
在这里插入图片描述

4.第四步

窗体接收值

代码如下(示例):

		//原来的窗体的无参构造方法
      public UserMessage()
        {
            InitializeComponent();
        }

        //创建全局变量对象
        Result re = new Result();
        User user = new User();
        yyl_mysql sql = new yyl_mysql();

		//有参构造方法
        public UserMessage(Result result)
        {
            InitializeComponent();

            //接收传过来的值
            re = result;

            //根据传过来的主键值返回用户的信息
            user = sql.ReadUser(re.Tel); //关于ReadUser()方法在前面的博客有说,不会可以翻阅一下

            //窗体组件赋值
            textBox_tel.Text = user.Tel;
            textBox_name.Text = user.Name;
            textBox_sex.Text = user.Sex;
            textBox_password.Text = user.Password;

        }

三、运行结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItHeiMa小飞机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值