我有这段代码:
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();
}
}
没关系,它只是不知道“callsign”,这是有意义的,因为它是在其他地方定义的,所以我在方法参数中添加了“字符串callign”,当我调用它时,我也会给它是呼号。由于我这样做,我在第一部分代码中遇到错误,在
行ssr.Click += new EventHandler(ssr_Click);
它说:'ssr_Click'没有重载匹配委托'System.EventHandler'。编辑此方法之前没问题。 它应该这样做:有人点击按钮,它将呼号发送到方法,从网站上的.php获取四位数代码,并将代码写在按钮上,所以我知道我也必须编辑方法,以便返回一个字符串,但首先我需要解决这个问题。 有任何想法吗?
答案 0 :(得分:2)
EventHandler
是一个委托类型,定义为:
public delegate void EventHandler(object sender, EventArgs e);
所以你的处理程序方法必须具有相同的签名,即
private void ssr_Click(object sender, EventArgs e)
在您的处理程序中,sender
应该是引发事件的对象,因此您可以从中获取callsign
数据,或者您可以将其存储在成员变量中。
答案 1 :(得分:0)
从事件处理程序方法中删除第一个参数string callsign
。按钮Click
事件的事件处理程序应该接受两个参数 - sender和event参数。
请记住,应该通过按钮调用此方法。 Button对您的callsign
参数一无所知。所以,你需要自己获得这个价值:
private void ssr_Click(object sender, EventArgs e)
{
string callsign = // get your value e.g. from textbox
// call to web service
}
答案 2 :(得分:0)
EventHandler 委托需要一个返回void
并且只接收两个参数的方法。第一个类型Object
(发件人)和第二个类型EventArgs
。一旦添加了另一个参数,就更改了函数的签名,它不再与预期的委托相同。
解决方案:从方法的参数中删除string callsign
,使其如下所示:
private void ssr_Click(object sender, EventArgs e)