【问题标题】:C# - There is no argument given that corresponds to the required formal parameter 'Role' of 'MainMenuForm.MainMenuForm(string)'C# - 没有给出与“MainMenuForm.MainMenuForm(string)”所需的形参“Role”相对应的参数
【发布时间】:2019-10-11 20:22:04
【问题描述】:

晚上好,

我正在尝试为我的 C# WinForms 应用程序创建一个基于角色的登录。我仍然是一个非常基本的 C# 用户,这是一个学术项目的一部分。上面的错误正在显示,我不知道如何解决它。

登录是从我创建的本地数据库中获取的,连接到 .NET(对于这个应用程序)。

我有两个用户,一个是管理员用户,一个是默认用户。

请注意,我知道 SQL 注入问题,我会在修复此错误后立即解决。

您能否就如何解决此错误提出建议?

提前谢谢你。

我正在关注一个 YT 教程,并了解了生成错误的部分 - 请参阅下面的代码。

namespace Library_System_Project
{
    public partial class MainMenuForm : Form
    {
        public MainMenuForm(string Role) // Error occurs here
        {
            InitializeComponent();
            lblRole.Text = Role; // Error occurs here
        }

另外,以下是不同的形式,但与上述相关:

private void btnOk_Click(object sender, EventArgs e)
{
    //Database Connection Setup
    SqlConnection Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename = C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\Library System Project.mdf;Integrated Security=True;Connect Timeout=30;");
    string query = "Select * from Users where User_Username = '" + txtUsername.Text.Trim() + "' and User_Password = '" + txtPassword.Text.Trim() + "'";
    SqlDataAdapter SDA = new SqlDataAdapter(query, Connection);
    DataTable DT = new DataTable();
    SDA.Fill(DT);

    // Access to Main Menu for Authorized Users
    if (DT.Rows.Count == 1)
    {
        MainMenuForm MainMenu = new MainMenuForm(DT.Rows[0][0].ToString());
        MainMenu.Show();
        this.Hide();
    }

【问题讨论】:

  • Winforms 在其控件上需要一个无参数构造函数。改用属性注入。
  • 谢谢伦纳特。抱歉要求很高,但我可以要求实现您在上面的代码中建议的内容,或者给我一个我可以遵循的简单示例,以便我可以更改它,好吗?提前谢谢你

标签: c# sql login arguments


【解决方案1】:

正如我在评论中提到的,Winforms 要求控件具有无参数构造函数。您可以通过创建一个方法来进一步初始化表单来解决这个问题:

public partial class MainMenuForm : Form
{
   public MainMenuForm()
   {
      InitializeComponent();            
   }

   public void SetRole(string role)
   {
       lblRole.Text = role;
   }
}

然后

private void btnOk_Click(object sender, EventArgs e)
{
    //...

    // Access to Main Menu for Authorized Users
    if (DT.Rows.Count == 1)
    {
        MainMenuForm MainMenu = new MainMenuForm();
        MainMenu.SetRole(DT.Rows[0][0].ToString());
        MainMenu.Show();
        this.Hide();
    }
}

【讨论】:

  • 嗨@Lennart,感谢您的帮助,但是,我遇到了一个小问题。我已经根据需要更改了 MainMenuForm (SetRole) 和 WelcomeForm (Ok button click) 上的所有内容。我昨天实现了一个额外的代码,它可能会导致问题。当我以管理员身份登录时,这些功能可用,但是当我在应用程序上进一步导航并恢复到 MainMenuForm 时,我失去了管理员应该拥有的权限(UserMenu 功能) - 我有两个用户,一个管理员用户名“jHarrington”和一个用户名“pDinklage”的默认用户 - 请参见下面的代码
  • private void MainMenuForm_Load(object sender, EventArgs e) { if (((Form)this).Controls["lblRole"].Text != "jHarrington") { btnUserMenu.Enabled = false; } }
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
相关资源
最近更新 更多