Подтвердить что ты не робот

Нет перегрузки для матчей delegate 'system.eventhandler'

Поскольку я довольно новичок в С#, я борюсь со следующим фрагментом кода. Когда я нажимаю кнопку "knop", метод klik должен быть выполнен. Метод должен нарисовать битмап 'b', созданный 'DrawMandel' в форме. Но я постоянно получаю сообщение об ошибке "нет перегрузки для match delegate" 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());
    }

}
4b9b3361

Ответ 1

Вам нужно изменить public void klik(PaintEventArgs pea, EventArgs e) на public void klik(object sender, System.EventArgs e), потому что нет обработчика событий Click с параметрами PaintEventArgs pea, EventArgs e.

Ответ 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);
}