【问题标题】:no overload for matches delegate 'system.eventhandler'匹配委托'system.eventhandler'没有重载
【发布时间】:2011-09-26 08:35:10
【问题描述】:

由于我对 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());
    }

}

【问题讨论】:

  • 事件处理程序委托有一个object sender, EventArgs e 参数列表。你的没有。为了记录,我怀疑Click 事件会有PaintEventArgs
  • 看起来您已将 OnPaint() 方法重命名为 klik,然后尝试将其连接到按钮事件处理程序。删除 += klik 分配,并在表单设计器中双击按钮,它将创建一个新的按钮处理程序。
  • 这是试错编程。会有更多的错误,你不能只画一个位图就希望它存活下来。访问您当地的图书馆并查看 Winforms 编程书籍。

标签: c#


【解决方案1】:

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

【讨论】:

  • 那么pea 变量会发生什么?
  • 豌豆在这种情况下不可用,即点击事件
【解决方案2】:

是的,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);
}

【讨论】:

    【解决方案3】:

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

    public void klik(object sender, EventArgs e)
    

    【讨论】:

      【解决方案4】:

      改变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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-25
        相关资源
        最近更新 更多