繁体   English   中英

如何修复此错误 - C# CS0123:“方法”没有重载与委托“事件处理程序”匹配

[英]How can I fix this error - C# CS0123: No overload for “method” matches delegate 'EventHandler'

我正在尝试将程序名称从我的表单传递给按钮单击事件。 但我不断收到以下错误消息:

“‘方法’没有重载匹配委托‘EventHandler’”

我在这里阅读了类似的问题并尝试了许多建议,但似乎没有任何东西可以解决我的具体问题。 我希望有人能告诉我哪里出错了。 以下是我读过的一些帖子:

“方法”没有重载匹配委托“System.EventHandler”

C# CS0123:匹配委托事件处理程序没有过载

错误 - “方法”没有重载与委托“System.EventHandler”匹配?

我似乎对如何匹配我的事件方法的签名没有清楚的了解。 我读过的文档没有帮助。 任何知识渊博的人的帮助将不胜感激。

我的代码如下:

using System;
using System.Windows.Forms;


namespace ProgramOne
{
    public partial class frmLogin : Form
    {
        public frmLogin(string pgmName)
        {
            InitializeComponent();
            Click += (sender, EventArgs) => { BtnSubmit_Click(sender, EventArgs, pgmName); };
        }


        private void BtnSubmit_Click(object sender, EventArgs e, string pgmName)
        {
            txtUserId.Text = txtUserId.Text.Trim();
            txtPassword.Text = txtPassword.Text.Trim();
            if (txtUserId.Text == "" || txtPassword.Text == "")
            {
                MessageBox.Show("Please provide a valid UserID and Password");
                return;
            }

            bool securityCheckPassed = true;
            if (securityCheckPassed)
            {
                //Open new form
                MessageBox.Show(frmLogin.pgmName);
            }
        }
    }
}

LarsTech 和 Chetan Ranpariya 提供了很好的建议,帮助我解决了这个问题。 我的解决方案出现在下面,供像我这样的其他 C# 新手使用:

using System;
using System.Windows.Forms;

namespace ProgramOne
{
    public partial class frmLogin : Form
    {
        private string pgmName;                      <-- Declare the variable
        public frmLogin(string pgmName)
        {
            InitializeComponent();
            this.pgmName = pgmName;                  <-- Initialize with passed value
        }

        private void BtnSubmit_Click(object sender, EventArgs e)  <-- Remove pgmName from original code above
        {
            txtUserId.Text = txtUserId.Text.Trim();
            txtPassword.Text = txtPassword.Text.Trim();
            if (txtUserId.Text == "" || txtPassword.Text == "")
            {
                MessageBox.Show("Please provide a valid UserID and Password");
                return;
            }

            bool securityCheckPassed = true;
            if (securityCheckPassed)
            {
                //Open new form
                MessageBox.Show(pgmName);           <-- Access the name
            }
        }
    }
}

程序名称现在显示在 BtnSubmit_Click 事件处理程序中,供我根据需要用于启动后续 forms。 只需替换“MessageBox.Show(pgmName);” 用“GoToForm(frmName);” (用您自己的名称替换示例名称值)。

我猜这个问题在行

Click += (sender, EventArgs) => { BtnSubmit_Click(sender, EventArgs, pgmName); };

因为EventArgs是来自System命名空间的 class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM