winform中把控件当参数传递,该怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform中把控件当参数传递,该怎么解决相关的知识,希望对你有一定的参考价值。

参考技术A void Show(Control yourControl)
//yourControl为要传递的控件



调用:
Show(button1); //button1为要传递的控件实例本回答被提问者采纳

如何从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怎么获取另一窗体的控件

您好,刚接触winform,遇到个小问题,请问winform窗体四边怎么添加阴影,谢谢。

C#winform 主窗体上的用户控件怎样调用主窗体的一个方法!

c# WPF 中把grid控件分成了2*2的四小块,每块中显示传过来的视频,要是传过来7个视频,我就得实现翻页,

Winform 下,两个不同窗体的DataGridView控件中的数据间传值怎么解决?

winform窗体怎么添加皮肤