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);

そして、ボタンに「1234」を書き込むメソッド ssr_Click がありました。これはテスト用でしたが、メソッドは次のようになります。

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」と一致しません。このメソッドを編集する前は問題ありませんでした。これを行うことになっています: 誰かがボタンをクリックすると、コールサインがメソッドに送信され、Web サイトの .php から 4 桁のコードが取得され、ボタンにコードが書き込まれます。メソッドを編集して文字列を返すようにしますが、最初にこれを解決する必要があります..何かアイデアはありますか?

4

3 に答える 3

2

EventHandler次のように定義されたデリゲート型です。

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

したがって、ハンドラーメソッドには同じ署名が必要です。つまり

private void ssr_Click(object sender, EventArgs e)

In your handler, sender should be the object which raised the event, so you might be able to get the callsign data from that, alternatively you could store it in a member variable.

于 2012-12-09T17:35:02.133 に答える
0

string callsignイベント ハンドラ メソッドから最初の引数を削除します。ボタンClickイベントのイベント ハンドラーは、sender と event 引数の 2 つのパラメーターを受け入れる必要があります。

このメソッドはボタンで呼び出す必要があることに注意してください。callsignボタンはあなたのパラメータについて何も知りません。したがって、この値を自分で取得する必要があります。

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デリゲートには、2 つの引数のみを返したり受け取ったりするメソッドが必要ですvoid。1番目はタイプ (送信者) で、2 番目はタイプです。別の引数を追加するとすぐに、関数の署名が変更され、期待されるデリゲートと同じではなくなりました。ObjectEventArgs

解決策: メソッドの引数から を削除すると、次string callsignのようになります。

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