Ich erstelle eine benutzerdefinierte DataGridView, in der die CheckBox zeigt einen Rahmen, wenn MouseHover ausgelöst wird.Zeichnen in C# winform ist ziemlich langsam
Hier ist was ich bisher gemacht habe.
void checkBox_MouseLeave(object sender, EventArgs e)
{
//showBorder defines whether the border is drawn.
this.showBorder = false;
this.DataGridView.InvalidateCell(this);
}
void CheckBoxMouseHover(object sender, EventArgs e)
{
this.showBorder = true;
this.CheckBox.BringToFront();
this.DataGridView.InvalidateCell(this);
}
protected override void Paint(...........)
{
..........
if (showBorder)
{
GraphicsPath border=new GraphicsPath();
border.AddRectangle(new Rectangle(checkBoxPosition.X-1,checkBoxPosition.Y-1,checkBoxSize.Width+1,checkBoxSize.Height+1));
graphics.DrawPath(new Pen(borderColor,1),border);
}
}
Aber es kommt so langsam, dass ich etwa eine halbe Sekunde warten muss, um die Grenze zu sehen. Wie auch immer, MouseLeave funktioniert gut. Also, wie kann ich hier die Leistung verbessern?
Außerdem, wie kann ich das Kontrollkästchen anpassen? B. die Hintergrundfarbe usw.
Sind Sie mit Double Buffering vertraut? http://www.bobpowell.net/doublebuffer.htm –
Ich versuchte automatische Double Buffering, und es machte keinen Unterschied. – user840866