Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复此错误-C#CS0123:No重载for“;方法”;匹配委托';EventHandler';_C# - Fatal编程技术网

如何修复此错误-C#CS0123:No重载for“;方法”;匹配委托';EventHandler';

如何修复此错误-C#CS0123:No重载for“;方法”;匹配委托';EventHandler';,c#,C#,我正在尝试将程序名从窗体传递到按钮单击事件。但我一直收到以下错误消息: “方法”没有重载与委托“EventHandler”匹配” 我在这里读过类似的问题,并尝试过许多建议,但似乎没有任何东西能解决我的具体问题。我希望有人能告诉我哪里出了问题。以下是我读过的一些帖子: 我似乎不清楚如何匹配我的事件方法的签名。我读过的文档没有帮助。任何有知识的人的帮助都将不胜感激 我的代码如下: using System; using System.Windows.Forms; namespace Pro

我正在尝试将程序名从窗体传递到按钮单击事件。但我一直收到以下错误消息:

“方法”没有重载与委托“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);
            }
        }
    }
}

我想问题就在这里

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

因为
EventArgs
是来自
系统
命名空间的类

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
            }
        }
    }
}
使用系统;
使用System.Windows.Forms;
名称空间编程
{
公共部分类frmLogin:表单
{

私有字符串pgmName;
sender,EventArgs
有两个参数,而
BtnSubmit\u Click
有三个参数。此分配无效。请将pgmName存储在某个私有变量中,并在按钮单击中直接使用,而不是尝试将参数传递给它。只需声明它:
private string pgmName=“”;
然后在构造函数中设置它:
this.pgmName=pgmName;
您的消息框只会引用它:
MessageBox.Show(pgmName);
我们不在问题中添加答案。只需在提供的框中发布答案。请参阅