私はカスタムユーザーコントロールを作成していますが、OnPaint()
をオーバーライドすると、それは継続的に呼び出されません。
これは私のコードです:c#遅れなしにonpaintを連続して呼び出す方法
[ToolboxData("<{0}:ColoredProgressBar runat=server></{0}:ColoredPorgressBar>")]
public class ColoredProgressBar : ProgressBar
{
public Timer timer;
public ColoredProgressBar()
{
timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.UserPaint, true);
}
public void timer_Tick(object sender , EventArgs e)
{
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// Call methods of the System.Drawing.Graphics object.
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);
Console.WriteLine("???");
}
}
私は10秒、メッセージを待っていた "???"私のコンソールに継続的に表示されるはずです バグは12メッセージだけが表示されます。私はInvalidate(true);
を試しましたが、メッセージは連続的に表示されますが、フォームは非常に遅れています。
e.Graphics.DrawString
は非常に高価な方法ではありません。
どのようにしてOnPaint()
をラグなく連続して呼び出すことができますか?
さて、あなたは、そのコード内のどこかでウィンドウを再描画させているわけではありません。おそらく、 'this.Invalidate()'や 'this.Refresh()'のような 'timer_Tick()'の中で何かするべきでしょう... –
この作品!たくさんありがとう!^_ ^ – Ben