2011-09-26 70 views
26

因为我对C#很陌生,所以我与下面的一段代码纠缠在一起。当我点击按钮'knop'时,必须执行'klik'方法。该方法必须在窗体上绘制由'DrawMandel'生成的位图'b'。但我总是得到错误'没有超载匹配委托'system.eventhandler'。没有超载的匹配委托'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()); 
    } 

} 
+3

事件处理程序委托有一个'对象发件人,EventArgs e'参数列表。你的不是。对于记录,我怀疑'Click'事件会有'PaintEventArgs'。 – BoltClock

+1

看起来您已将OnPaint()方法重命名为klik,然后尝试将其连接到按钮事件处理程序。除去+ = klik赋值,并从窗体设计器中双击该按钮,它将创建一个新的Button处理程序。 – StuartLC

+0

这是试错法编程。会有更多的错误,你不能只画一个位图,并希望它幸存下来。访问您当地的图书馆并查看Winforms编程手册。 –

回答

46

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

+0

然后会发生什么对'pea'变量? – Willem

+0

豌豆在这种情况下将不可用,即Click事件 –

4

你需要用按钮单击处理程序要匹配的模式

public void klik(object sender, EventArgs e) 
6

是没有与Click事件处理程序(的点击)一个问题 - 第一个参数必须是一个对象类型,第二必须是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

更改的点击方法如下:

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); 
} 
相关问题