2011-09-26 17 views
26

Dato che sono abbastanza nuovo per C#, mi sforzo con il seguente pezzo di codice. Quando clicco sul pulsante 'knop', il metodo 'klik' deve essere eseguito. Il metodo deve disegnare la Bitmap 'b', generata da 'DrawMandel' sul modulo. Ma ottengo costantemente l'errore "nessun sovraccarico per le partite delegate" system.eventhandler ".nessun sovraccarico per le partite delegato '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

delegati del gestore eventi hanno un mittente 'oggetto, EventArgs e' lista degli argomenti. Il tuo no. E per la cronaca dubito che un evento "Click" abbia un "PaintEventArgs". – BoltClock

+1

Sembra che tu abbia rinominato un metodo OnPaint() su klik e poi hai provato a collegarlo a un gestore di eventi del pulsante. Rimuovere l'assegnazione + = klik e dal progettista di moduli, fare doppio clic sul pulsante e creerà un nuovo gestore di pulsanti. – StuartLC

+0

Questa è la programmazione di prova ed errore. Ci saranno molti più errori, non puoi semplicemente disegnare una bitmap e sperare che sopravviva. Visita la tua biblioteca locale e controlla un libro di programmazione di Winforms. –

risposta

46

è necessario modificare public void klik(PaintEventArgs pea, EventArgs e)-public void klik(object sender, System.EventArgs e) perché non v'è alcun gestore Click evento con parametri PaintEventArgs pea, EventArgs e.

+0

Cosa succederà alla variabile 'pea' allora? Il pisello – Willem

+0

non sarà disponibile in questo contesto, ad esempio Click event –

4

È necessario avvolgere il tasto click gestore per abbinare il modello

public void klik(object sender, EventArgs e) 
6

Sì, c'è un problema con gestore eventi Click (klik) - primo argomento deve essere un tipo di oggetto e il secondo deve essere EventArgs.

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

Se si vuole dipingere su una forma o un controllo quindi utilizzare CreateGraphics metodo.

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

modificare il metodo klik come segue:

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