如何从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中将值传递给用户控件?的主要内容,如果未能解决你的问题,请参考以下文章

在角度js中将值从一个控件传递到另一个控件[重复]

winform 父窗体如何获取子窗体控件的值

如何在每个请求中将 winform 自定义用户凭据传递给 WCF 服务?

如何给Winform 的Panel控件添加滚动条

winform 中如何得到combobox控件 Lord加载后 用户选择后 返回其选中的索引值

如何在flutter中将数据从firestore传递给Typeahead