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