2011-09-26 7 views
26

저는 C#을 처음 접했을 때 다음 코드 조각으로 고심하고 있습니다. 'knop'버튼을 클릭하면 'klik'메서드가 실행되어야합니다. 메서드는 양식에 'DrawMandel'에 의해 생성 된 비트 맵 'b'를 그려야합니다. 하지만 나는 지속적으로 ''위임자 'system.eventhandler'에게 과부하가 없음을 알립니다.일치하는 항목에 대한 오버로드가 없습니다. '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

이벤트 처리기 대리자는 '개체를 보낸 사람을 가지고있는 EventArgs는 인수 목록을 e'. 너는 그렇지 않아. 그리고 기록을 위해서 나는'Click' 이벤트가'PaintEventArgs'를 가질 것이라고 의심합니다. – BoltClock

+1

OnPaint() 메서드의 이름을 klik으로 바꾼 다음 단추 이벤트 핸들러에 연결하려고했습니다. + = klik 할당을 제거하고 폼 디자이너에서 버튼을 더블 클릭하면 새로운 버튼 핸들러가 생성됩니다. – StuartLC

+0

이것은 시행 착오 프로그래밍입니다. 훨씬 더 많은 오류가있을 것입니다. 비트 맵을 그릴 수 있고 그것이 살아남기를 바랍니다. 지역 도서관을 방문하여 Winforms 프로그래밍 북을 확인하십시오. –

답변

46

당신은 매개 변수 PaintEventArgs pea, EventArgs e 아무 Click 이벤트 처리기가 없기 때문에 public void klik(object sender, System.EventArgs e)public void klik(PaintEventArgs pea, EventArgs e)을 변경해야합니다. 첫 번째 인수는 객체 유형이어야합니다 및 제 2 EventArgs입니다해야합니다 -

+0

그러면 '완두콩'변수는 어떻게 될까요? – Willem

+0

완두콩은이 컨텍스트에서 사용할 수 없습니다. 즉, Click 이벤트 –

4

당신은 패턴

public void klik(object sender, EventArgs e) 
6

예를 클릭 이벤트 핸들러 (KLIK)에 문제가에게 맞게 버튼을 클릭 핸들러를 포장해야합니다.

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

변경은 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); 
} 
관련 문제