2016-03-26 32 views
1

Özel bir düğmem var. OnPaint yöntemi, denetimin sınıf dosyasında çalışıyor, ancak Button.Paint yöntemi, Form.cs'da çalışmıyor. Bu neden oluyor ve nasıl düzeltilebilir? Düğme içinNeden özel kontrolün boya olayı Form.cs'de çalışmıyor?

Kodum:

//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... 

kod Form.cs yılında: ben bir çözüm buldum gelmiş

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

cevap

1

. Nedeni, base.OnPaint(e) kodunu OnPaint(e) kod bloğunda sildim. Eğer [Net Olay Yetiştirme Modeli] bir göz atacak olursak çözüm sadece base.OnPaint(e)

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

eklemek edilir

(https://msdn.microsoft.com/en-us/library/edzehd2t (v = vs.110) .aspx) 'XXXX' olayının' OnXXXX' tarafından yükseltileceğini göreceksiniz ve bir 'OnXXXX'yi geçersiz kıldığınızda olayı yükseltmek için 'base.OnXXXX' çağırmalısınız. –