我正在尝试使用在
提供的圆形进度条解决方案Visual basic圆形进度条
然而,我得到了很多错误信息,当我试图将它纳入一个Windows窗体,有文本框条目(与系统有关)。EventArgs与PaintEventArgs和MyBase。
我试过"混合";两个句柄如下:
Private Sub LoginForm1_Load(ByVal sender As System)。对象,即系统。(如PaintEventArgs)处理MyBase。负载,我。油漆
,但这当然失败了。谁能告诉我有什么别的选择吗?由于
你把很容易的事情弄得很困难。所有绘图都在Paint
事件处理程序或从Paint
事件处理程序调用的方法中完成。这就是绘画的全部内容。你们已经知道怎么做了因为你们已经有了另一道题的代码。使用代码。
如果绘图的代码需要从其他地方获取数据来知道要画什么,那么就这样做。使用一个或多个字段的值来完成其工作的方法并没有什么神奇之处。该字段中的数据可以通过任何其他方法放置在那里,例如表单的Load
事件处理程序,TextBox
的TextChanged
事件处理程序或Button
的Click
事件处理程序。
下面是一个简单的例子,将绘制TextBox
中的任何内容作为用户类型:
Private textToDraw As String
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.Text
textToDraw = TextBox1.Text
'Force a Paint event to be raised.
Invalidate()
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
e.Graphics.DrawString(textToDraw, Font, Brushes.Black, PointF.Empty)
End Sub
将数据放在可以访问的地方,引发Paint
事件,进行绘图。简单!
需要注意的主要一点是,调用Invalidate
而不带参数将导致它所调用的整个控件(在本例中是窗体)被重新绘制,如果可能的话应该避免。您应该计算并指定可能已经或可能已经更改的最小区域,并在调用Invalidate
时传递该区域。这样,控件中肯定没有改变的部分就不会被重新绘制,从而加快了过程。你每次都画出所有的东西,但是在屏幕上重新绘制像素是操作的缓慢部分,因此应该最小化。