测试我要的功能的方法:
建一form1,在form1上画一个msFlexGrid--->msGrid0,两个button-->Button1、Button2
窗体载入后
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics
Dim p As New Pen(Color.Blue, 1)
Dim rect As New Rectangle(10, 10, 40, 40)
g = MsGrid0.CreateGraphics() 'msGrid0画矩形,不然会跑到msGrid0的背后去,看不到
MsGrid0.set_TextMatrix(1, 1, "测试Grid控件") '显示两个字,看一下矩形会不会所这些字盖住
g.DrawRectangle(p, rect)
g.Dispose()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'想办法把刚button1按下时产生的矩表往右移动10点
End Sub
没有Location属性,你可以这样试试:
Dim G As Graphics = frm.CreateGraphics()
Dim p As New pen(Color.Black, 2)
Dim rect As rectangle = new rectangle(10,10,40,30)
g.drawretangle(p,rect)
请参考画圆的:
Public Sub DrawCircle(ByVal frm As Windows.Forms.Form, ByVal Rect As Rectangle, ByVal fColor As Color)
Dim a As Graphics = frm.CreateGraphics()
Dim pen As New pen(System.Drawing.Color.Black, 2)
Dim sBrush As SolidBrush = New SolidBrush(fColor)
a.DrawEllipse(pen, Rect)
a.FillEllipse(sBrush, Rect)
看看这段代码行不行:
Public Class CRectangle
Dim m_r As Rectangle
Dim m_Container As Control
Dim m_Visible As Boolean = True
Public Sub New(ByVal Container As Control, ByVal r As Rectangle)
m_Container = Container
AddHandler m_Container.Paint, AddressOf Me.PaintEvent
Me.Rect = r
End Sub
Public Property Rect() As Rectangle
Get
Return m_r
End Get
Set(ByVal Value As Rectangle)
If m_r.IsEmpty() = False Then
Me.Clear()
End If
m_r = Value
Me.Invalidate()
End Set
End Property
Public Property Visible() As Boolean
Get
Return m_Visible
End Get
Set(ByVal Value As Boolean)
m_Visible = Value
Me.Invalidate()
End Set
End Property
Private Sub Clear()
Dim b As Boolean = m_Visible
Me.m_Visible = False
Me.Invalidate()
Me.m_Visible = b
End Sub
Private Sub Invalidate()
'*** 很奇怪,失效区域必须比实际图形区域大1才能全部刷新
Me.m_Container.Invalidate(New Region(New Rectangle(m_r.X, m_r.Y, m_r.Width + 1, m_r.Height + 1)))
End Sub
Private Sub PaintEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
If m_Visible Then
If e.ClipRectangle.IntersectsWith(m_r) Then
e.Graphics.DrawRectangle(System.Drawing.Pens.Black, m_r)
End If
End If
End Sub
End Class