2011-09-26 8 views
26

Ponieważ jestem całkiem nowy w C#, mam problem z następującym kodem. Kiedy klikam przycisk "knop", należy wykonać metodę "klik". Metoda musi narysować bitmapę "b" wygenerowaną przez "DrawMandel" na formularzu. Ale ciągle otrzymuję komunikat o błędzie "nie ma przeciążenia dla delegatów meczów" system.eventhandler ".brak przeciążenia dla meczów 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()); 
    } 

} 
+3

obsługi zdarzeń delegaci mają 'object sender, EventArgs e' listę argumentów. Twój nie. W przypadku płyty wątpię, aby zdarzenie "Click" miało nazwę "PaintEventArgs". – BoltClock

+1

Wygląda na to, że zmieniono nazwę metody OnPaint() na klik, a następnie próbowano podłączyć ją do obsługi zdarzeń przycisku. Usuń + = przypisanie kliknięcia, a od projektanta formularzy dwukrotnie kliknij przycisk i utworzy nowy Button Handler. – StuartLC

+0

To jest programowanie próbne i błędów. Będzie o wiele więcej błędów, nie możesz po prostu narysować bitmapy i mieć nadzieję, że przetrwają. Odwiedź lokalną bibliotekę i sprawdź książkę do programowania WinForm. –

Odpowiedz

46

Musisz zmienić public void klik(PaintEventArgs pea, EventArgs e) do public void klik(object sender, System.EventArgs e) ponieważ nie ma obsługi Click wydarzenie z parametrami PaintEventArgs pea, EventArgs e.

+0

Co stanie się ze zmienną "grochu"? – Willem

+0

Groch nie będzie dostępny w tym kontekście, tj. Kliknięcie zdarzenia –

4

Trzeba owinąć kliknij przycisk obsługi do pasuje do wzorca

public void klik(object sender, EventArgs e) 
6

Tak tam jest problem z procedury obsługi zdarzenia Click (klik) - Pierwszy argument musi być typu obiektu i drugi należy EventArgs.

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

Jeśli chcesz malować na formularzu lub kontroli następnie użyć CreateGraphics metody.

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

zmienić metodę klik następująco:

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