2011-09-26 27 views
26

Vì tôi khá mới đối với C#, tôi đấu tranh với đoạn mã sau đây. Khi tôi bấm vào nút 'knop', phương thức 'klik' phải được thực thi. Phương thức này phải vẽ bitmap 'b', được tạo bởi 'DrawMandel' trên biểu mẫu. Nhưng tôi liên tục nhận được lỗi 'không có tình trạng quá tải cho phù hợp với đại biểu' system.eventhandler '.không quá tải cho các trận đấu đại biểu '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

đại biểu handler cho sự kiện có một 'object sender, EventArgs e' danh sách đối số. Của bạn không. Và đối với bản ghi, tôi nghi ngờ một sự kiện 'Click' sẽ có' PaintEventArgs'. – BoltClock

+1

Có vẻ như bạn đã đổi tên một phương thức OnPaint() thành klik và sau đó cố gắng nối nó với trình xử lý sự kiện nút. Xóa nhiệm vụ + = klik và từ trình thiết kế biểu mẫu, nhấp đúp vào nút và nó sẽ tạo Trình xử lý nút mới. – StuartLC

+0

Đây là chương trình thử và lập trình lỗi. Sẽ có nhiều lỗi hơn, bạn không thể vẽ một bitmap và hy vọng nó sẽ tồn tại. Truy cập thư viện địa phương của bạn và xem một cuốn sách lập trình Winforms. –

Trả lời

46

Bạn cần thay đổi public void klik(PaintEventArgs pea, EventArgs e)-public void klik(object sender, System.EventArgs e) vì không có xử lý sự kiện Click với các thông số PaintEventArgs pea, EventArgs e.

+0

Điều gì sẽ xảy ra với biến 'pea'? – Willem

+0

hạt đậu sẽ không có sẵn trong ngữ cảnh này, tức là sự kiện Nhấp chuột –

4

Bạn cần phải quấn handler bấm vào nút để phù hợp với mô hình

public void klik(object sender, EventArgs e) 
6

Có có một vấn đề với bộ xử lý sự kiện Click (klik) - Lập luận đầu tiên phải là một loại đối tượng và thứ hai phải EventArgs.

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

Nếu bạn muốn vẽ trên biểu mẫu hoặc điều khiển thì sử dụng phương pháp 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); 
} 
2

Thay đổi phương pháp klik như sau:

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); 
} 
Các vấn đề liên quan