没有匹配委托'system.eventhandler'的重载

时间:2011-09-26 08:35:10

标签: c#

由于我对C#很陌生,所以我在使用下面的代码。当我点击按钮'knop'时,必须执行方法'klik'。该方法必须在窗体上绘制由'DrawMandel'生成的位图'b'。但我不断得到错误'没有重载代表'system.eventhandler'。

using System;
using System.Windows.Forms;
using System.Drawing;

class Mandelbrot : Form 
{
    public Bitmap b;
    public Mandelbrot() 
    {
        Button knop;
        knop = new Button();        
        knop.Location = new Point(370, 15);        
        knop.Size = new Size(50, 30);
        knop.Text = "OK";        

        this.Text = "Mandelbrot 1.0";
        this.ClientSize = new Size(800, 800);
        knop.Click += this.klik;
        this.Controls.Add(knop);        


    }
    public void klik(PaintEventArgs pea, EventArgs e) {
        Bitmap c = this.DrawMandel();
        Graphics gr = pea.Graphics;
        gr.DrawImage(b, 150, 200);
    }
    public Bitmap DrawMandel()
    {
        //function that creates the bitmap
        return b;
    }
    static void Main() {
        Application.Run(new Mandelbrot());
    }

}

4 个答案:

答案 0 :(得分:52)

您需要将public void klik(PaintEventArgs pea, EventArgs e)更改为public void klik(object sender, System.EventArgs e),因为没有带参数Click的{​​{1}}事件处理程序。

答案 1 :(得分:6)

是的,Click事件处理程序(klik)存在问题 - 第一个参数必须是对象类型,第二个参数必须是EventArgs。

public void klik(object sender, EventArgs e) {
  //
}

如果要在表单或控件上绘制,请使用CreateGraphics方法。

public void klik(object sender, EventArgs e) {
    Bitmap c = this.DrawMandel();
    Graphics gr = CreateGraphics();  // Graphics gr=(sender as Button).CreateGraphics();
    gr.DrawImage(b, 150, 200);
}

答案 2 :(得分:4)

您需要包含按钮单击处理程序以匹配模式

public void klik(object sender, EventArgs e)

答案 3 :(得分:2)

按如下方式更改klik方法:

public void klik(object pea, EventArgs e)
{
    Bitmap c = this.DrawMandel();
    Button btn = pea as Button;
    Graphics gr = btn.CreateGraphics();
    gr.DrawImage(b, 150, 200);
}