2011-09-26 13 views
26

C# 'da oldukça yeni olduğum için aşağıdaki kodla mücadele ediyorum. 'Knop' düğmesine tıkladığımda, 'klik' yönteminin çalıştırılması gerekir. Yöntem, form üzerinde 'DrawMandel' tarafından oluşturulan Bitmap 'b' çizmelidir. Ancak sürekli 'error.computer' system.eventhandler 'için aşırı yüklenme hatası aldım.Eşleşmeler için aşırı yükleme yok '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

Olay işleyicisi delegelerin 'nesne gönderen sahip EventArgs bağımsız değişken listesi e'. Seninki değil. Ve kayıt için bir 'Click' olayının 'PaintEventArgs' olduğundan şüphe duyuyorum. – BoltClock

+1

Klik için OnPaint() yöntemini yeniden adlandırdınız ve ardından bir düğme olay işleyicisine bağlamayı denediniz. + = Klik atamalarını kaldırın ve form tasarımcısından düğmeyi çift tıklayın ve yeni bir Button Handler yaratacaktır. – StuartLC

+0

Bu, deneme ve hata programlamasıdır. Daha fazla hata olacak, sadece bir bitmap çizemez ve hayatta kalacağını umamazsınız. Yerel kütüphanenizi ziyaret edin ve bir Winforms programlama kitabına bakın. –

cevap

46

Sen parametreleri PaintEventArgs pea, EventArgs e ile hiçbir Click olay işleyicisi olduğundan public void klik(object sender, System.EventArgs e) için public void klik(PaintEventArgs pea, EventArgs e) değiştirmeniz gerekir. İlk bağımsız değişken bir nesne türü olmalıdır ve ikinci EventArgs olmalıdır -

+0

O zaman 'bezelye' değişkenine ne olacak? Bu bağlamda – Willem

+0

bezelye kullanılamayacaktır. –

4

Sen düzeninin

public void klik(object sender, EventArgs e) 
6

Evet tıklayın olay işleyicisi (klik) ile ilgili bir sorun olduğunu eşleşecek düğmeye tıklama işleyicisi sarmak gerekir. Eğer bir form veya kumanda üzerindeki boyamak istiyorsanız

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

sonra CreateGraphics yöntemini kullanın.

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

değiştirme klik aşağıda belirtilmiştir:

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); 
} 
İlgili konular