1

我有这个代码:

Button ssr = new Button();
                ssr.Text = "SSR";
                ssr.Location = new Point(500, 5);
                ssr.Size = new Size(50, 30);
                ssr.Click += new EventHandler(ssr_Click);

我有一个方法 ssr_Click 在按钮上写了一个“1234”。那只是为了测试,现在方法如下所示:

private void ssr_Click(string callsign, object sender, EventArgs e)
    {
        using (var wb = new WebClient())
        {
            string url = "xxxxxxxx";
            WebRequest request = WebRequest.Create(url);
            request.Method = "POST";
            string postData = "callsign=" + callsign;
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            WebResponse response = request.GetResponse();
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string squawk = reader.ReadToEnd();
            System.Windows.Forms.MessageBox.Show(squawk); // !!!
            reader.Close();
            dataStream.Close();
            response.Close();
        }
    }

没关系,它只是不知道“呼号”,这是有道理的,因为它是在其他地方定义的,所以我在方法参数中添加了“字符串呼号”,当我调用它时,我也会给它呼号. 因为我这样做了,我在第一部分代码中遇到了错误,在

ssr.Click += new EventHandler(ssr_Click);

它说:“ssr_Click”没有重载与委托“System.EventHandler”匹配。在编辑此方法之前很好。它应该这样做:有人单击按钮,它将呼号发送到方法,从网站上的 .php 获取四位数代码,并将代码写在按钮上,所以我知道我还必须编辑该方法,使其返回一个字符串,但首先我需要解决这个问题。有什么想法吗?

4

3 回答 3

2

EventHandler是一个委托类型,定义为:

public delegate void EventHandler(object sender, EventArgs e);

因此您的处理程序方法必须具有相同的签名,即

private void ssr_Click(object sender, EventArgs e)

在您的处理程序中,sender应该是引发事件的对象,因此您可以从中获取callsign数据,或者您可以将其存储在成员变量中。

于 2012-12-09T17:35:02.133 回答
0

string callsign从事件处理程序方法中删除第一个参数。按钮事件的事件处理程序Click应该接受两个参数 - 发送者和事件参数。

请记住,此方法应由按钮调用。callsignButton 对您的参数一无所知。所以,你需要自己获取这个值:

private void ssr_Click(object sender, EventArgs e)
{
     string callsign = // get your value e.g. from textbox

     // call to web service
}
于 2012-12-09T17:34:20.607 回答
0

EventHandler委托需要一个只返回void和接收两个参数的方法。第一个 type Object(即发件人)和第二个 type EventArgs。一旦您添加了另一个参数,您就更改了函数的签名,它不再与预期的委托相同。

解决方案:string callsign从方法的参数中删除 ,使其看起来像这样:

private void ssr_Click(object sender, EventArgs e)
于 2012-12-09T17:34:27.697 回答