2016-03-26 17 views
1

Ich habe eine benutzerdefinierte Schaltfläche. OnPaint Methode funktioniert in der Klassendatei der Steuerung, aber die Button.Paint Methode funktioniert nicht in Form.cs. Warum passiert das und wie kann es behoben werden?Warum funktioniert das Paint-Ereignis des benutzerdefinierten Steuerelements in Form.cs nicht?

Mein Code für Schaltfläche:

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

Code in Form.cs:

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

Antwort

1

ich eine Lösung selbst gefunden zu haben. Der Grund dafür ist, dass ich den base.OnPaint(e) Codecode OnPaint(e) gelöscht habe.

Die Lösung wird nur base.OnPaint(e)

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

hinzufügen Wenn Sie einen Blick auf [.Net Ereignis Raising Pattern] (https://msdn.microsoft.com/en-us/library/edzehd2t (v = vs.110) .aspx) Sie werden sehen, dass das 'XXXX'-Ereignis von' OnXXXX' ausgelöst wird. Wenn Sie also ein 'OnXXXX' überschreiben, sollten Sie' base.OnXXXX' aufrufen, um das Ereignis auszulösen. –