首页 > 解决方案 > 如何将值从 winform 传递给用户控件?

问题描述

我有一个注册表单、一个登录表单和一个主表单。程序从注册表单开始。如果我注册数据(姓名,电子邮件,密码)加载到本地数据库。当我正确登录时显示主窗体。主窗体有一个带有标签的用户控件。我想用她/他的名字在标签上写一个欢迎文字。示例:“欢迎乔希!”。所以我应该识别用户,所以我使用登录表单中的 textboxEmail.Text 。我的解决方案不起作用。有我的代码:

namespace personalFinance
{
   public partial class Login : Form
      {
        public Login()
         {

            InitializeComponent();
            var MainForm = new MainForm();
            MainForm.Show();
            HomepageUC hp = new HomepageUC(textboxEmail.Text);
            hp.Show();
         } 
      }

}
namespace personalFinance
{
    public partial class HomepageUC : UserControl
    {
       string login = "";
       public HomepageUC(string email)
          {

            InitializeComponent();
            login = email;
            var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB; 
            AttachDbFileName=|DataDirectory|database.mdf;");
            conn.Open();
            var cmd = new SqlCommand($"SELECT email FROM registration_data 
            WHERE email = '{login}'", conn);
            var reader = cmd.ExecuteReader();
            while (reader.Read()) labelWelcome.Text = reader[0].ToString();
          }
     }

 }

我得到了那个错误:没有给出与“HomepageUC.HomepageUC(string)”personalFinance C:\Users\nickname18\source\repos\personalFinance\personalFinance\MainForm.Designer.cs 所需的形式参数“email”相对应的参数

当我单击此错误检索到 MainForm.Designer.cs this.HompageUC1 = new personalFinance.Homepage1(); 它带有红色下划线。

标签: c#sql-serverwinformsuser-controls

解决方案


电子邮件字段是唯一的吗?你已经调试了吗?是否发生任何错误?也许查询带来了多条记录或没有记录,也许该字段也是空的。尝试这个:

namespace personalFinance
{
    public partial class HomepageUC : UserControl
    {
       string login = "";
       public HomepageUC(string email)
          {

            InitializeComponent();
            login = email;
            var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB; 
            AttachDbFileName=|DataDirectory|database.mdf;");
            conn.Open();
            var cmd = new SqlCommand($"SELECT email FROM registration_data 
            WHERE email = '{login}'", conn);
            var reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                if(!string.IsNullOrEmpty(reader[0].ToString()))
                {
                    labelWelcome.Text = reader[0].ToString();
                    break;
                }
            }           
        }
    }
}

推荐阅读