2016-03-26 11 views
1

私はカスタムボタンを持っています。 OnPaintメソッドがコントロールのクラスファイルで動作していますが、メソッドはForm.csでは機能しません。なぜこれが起こり、どのように修正することができますか?カスタムコントロールのpaintイベントがForm.csで動作しないのはなぜですか?

ボタンの私のコード:Form.cs

//code...   
public AltoButton() 
{  
    SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer|ControlStyles.ResizeRedraw|ControlStyles.SupportsTransparentBackColor|ControlStyles.UserPaint, true); 
    BackColor = Color.Transparent; 
    ForeColor = Color.Black; 
    Font = new System.Drawing.Font("Comic Sans MS", 10, FontStyle.Bold); 
    state = MouseState.Leave; 
    transparency = false; 
} 
#endregion 
#region Events 
protected override void OnPaint(PaintEventArgs e) 
{ 
    //code to draw shape and painting 
} 
//code... 

コード:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     altoButton1.Paint += altoButton1_Paint; 
    } 

    void altoButton1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawLine(Pens.Red, 3, 3, 10, 10); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     altoButton1.Invalidate(); 
    } 
} 

答えて

1

は、私は解決策自分自身を発見しました。理由は、OnPaint(e)コードブロックでbase.OnPaint(e)を削除したためです。

ソリューションを使用すると、[ネットイベント調達パターン](https://msdn.microsoft.com/en-us/library/edzehd2t(Vを見てみる場合は、単にbase.OnPaint(e)

protected override void OnPaint(PaintEventArgs e) 
{ 
    //code to draw shape and painting 
    base.OnPaint(e); 
} 
+1

を追加することです= vs.110).aspx) 'XXXX'イベントは' OnXXXX'によって生成されるので、 'OnXXXX'をオーバーライドするときに' base.OnXXXX'を呼び出してイベントを発生させるべきです。 –

関連する問題