如何从winform中将值传递给用户控件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从winform中将值传递给用户控件?相关的知识,希望对你有一定的参考价值。
我有一个注册表,一个登录表和一个主表。该程序从注册表开始。如果我注册数据(名称,电子邮件,密码)加载到本地数据库。当我正确登录显示主窗体。主窗体具有带标签的usercontrol。我想用她/他的名字在标签上写一个欢迎文本。示例:“欢迎Josh!”。所以我应该识别用户,所以我使用登录表单中的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();它是红色的下划线。
WinForms设计器通过调用其默认构造函数来创建用户控件。因此,您无法定义这样的自定义构造函数。
相反,您应该创建一个自定义属性。
电子邮件字段是唯一的吗?你有调试吗?发生任何错误?也许查询带来了多条记录或没有记录,也许该字段也是空的。试试这个:
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;
}
}
}
}
}
您应该使用参数化查询并正确使用非托管资源。对于IDisposable而言,一个简单而快速的技巧就是qazxsw poi
using keyword
}
以上是关于如何从winform中将值传递给用户控件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在每个请求中将 winform 自定义用户凭据传递给 WCF 服务?