运行时拉伸和移动控件的类。

Public Class Resize

' 移动了吗?

Private IsMoving As Boolean = False

' 控件最后的宽

Private ctrlLastWidth As Integer = 0

' 控件最后的高

Private ctrlLastHeight As Integer = 0

' 控件原来的宽

Private ctrlWidth As Integer

' 最后的左侧坐标

Private ctrlLastLeft As Integer

' 最后的顶部坐标

Private ctrlLastTop As Integer

' 控件原来的高

Private ctrlHeight As Integer

' 控件的左侧坐标

Private ctrlLeft As Integer

' 控件的顶部坐标

Private ctrlTop As Integer

' 光标的左侧坐标

Private cursorL As Integer

' 光标的顶部坐标

Private cursorT As Integer

'

Private Htap As Integer

Private Wtap As Integer

Private ctrlIsResizing As Boolean = False

' 控件的大小矩形

Private ctrlRectangle As System.Drawing.Rectangle = New System.Drawing.Rectangle()

Private ctrl As Control ' 操作的控件

Private frm As Form ' 控件的父亲窗体

' 构造函数

Public Sub New ( ByVal c As Control, ByVal frm As Form)

ctrl = c

Me .frm = frm

' 标题栏和横向滚动条以及边框的宽

Me .Htap = Me .frm.Height - Me .frm.ClientRectangle.Height

' 纵向滚动条和边框的宽

Me .Wtap = Me .frm.Width - Me .frm.ClientRectangle.Width

AddHandler ctrl.MouseDown, AddressOf MouseDown

AddHandler ctrl.MouseMove, AddressOf MouseMove

AddHandler ctrl.MouseUp, AddressOf MouseUp

End Sub

' 鼠标按下后的处理

Private Sub MouseDown( ByVal sender As Object , ByVal e As MouseEventArgs)

If frm Is Nothing Then

Return

End If

MessageBox.Show(e.Y.ToString)

MessageBox.Show(( Me .ctrl.Height - 10).ToString)

MessageBox.Show(e.X.ToString)

MessageBox.Show(( Me .ctrl.Width - 10).ToString)

' 设置第一次有效单击的范围

If e.X < Me .ctrl.Width - 10 OrElse e.Y < Me .ctrl.Height - 10 Then

Me .IsMoving = True

' 指定要绘制的虚线框的坐标(相对屏幕)

Me .ctrlLeft = Me .frm.DesktopLocation.X + Me .Wtap + Me .ctrl.Left

Me .ctrlTop = Me .frm.DesktopLocation.Y + Me .Htap + Me .ctrl.Top

' 光标的位置

Me .cursorL = Cursor.Position.X

Me .cursorT = Cursor.Position.Y

' 控件的原来宽与高

Me .ctrlWidth = Me .ctrl.Width

Me .ctrlHeight = Me .ctrl.Height

End If

ctrlRectangle.Location = New System.Drawing.Point( Me .ctrlLeft, Me .ctrlTop)

ctrlRectangle.Size = New System.Drawing.Size(ctrlWidth, ctrlHeight)

' 绘制框架(矩形大小,背景色,边框风格(这里是虚线框))

ControlPaint.DrawReversibleFrame(ctrlRectangle, Color.Empty, System.Windows.Forms.FrameStyle.Dashed)

End Sub

Private Sub MouseMove( ByVal sender As Object , ByVal e As MouseEventArgs)

If frm Is Nothing Then

Return

End If

' 如果是鼠标左键

If e.Button = MouseButtons.Left Then

If Me .IsMoving Then

'

If ctrlLastLeft = 0 Then

ctrlLastLeft = ctrlLeft

End If

'

If ctrlLastTop = 0 Then

ctrlLastTop = ctrlTop

End If

Dim locationX As Integer = (Cursor.Position.X - Me .cursorL + Me .frm.DesktopLocation.X + Me .Wtap + Me .ctrl.Location.X)

Dim locationY As Integer = (Cursor.Position.Y - Me .cursorT + Me .frm.DesktopLocation.Y + Me .Htap + Me .ctrl.Location.Y)

If locationX < Me .frm.DesktopLocation.X + Me .Wtap Then

locationX = Me .frm.DesktopLocation.X + Me .Wtap

End If

If locationY < Me .frm.DesktopLocation.Y + Me .Htap Then

locationY = Me .frm.DesktopLocation.Y + Me .Htap

End If

Me .ctrlLeft = locationX

Me .ctrlTop = locationY

ctrlRectangle.Location = New System.Drawing.Point( Me .ctrlLastLeft, Me .ctrlLastTop)

ctrlRectangle.Size = New System.Drawing.Size(ctrlWidth, ctrlHeight)

ControlPaint.DrawReversibleFrame(ctrlRectangle, Color.Empty, System.Windows.Forms.FrameStyle.Dashed)

ctrlLastLeft = ctrlLeft

ctrlLastTop = ctrlTop

ctrlRectangle.Location = New System.Drawing.Point(ctrlLeft, ctrlTop)

ctrlRectangle.Size = New System.Drawing.Size(ctrlWidth, ctrlHeight)

ControlPaint.DrawReversibleFrame(ctrlRectangle, Color.Empty, System.Windows.Forms.FrameStyle.Dashed)

Return

End If

Dim sizeageX As Integer = (Cursor.Position.X - Me .frm.DesktopLocation.X - Me .Wtap - Me .ctrl.Location.X)

Dim sizeageY As Integer = (Cursor.Position.Y - Me .frm.DesktopLocation.Y - Me .Htap - Me .ctrl.Location.Y)

If sizeageX < 2 Then

sizeageX = 1

End If

If sizeageY < 2 Then

sizeageY = 1

End If

ctrlWidth = sizeageX

ctrlHeight = sizeageY

If ctrlLastWidth = 0 Then

ctrlLastWidth = ctrlWidth

End If

If ctrlLastHeight = 0 Then

ctrlLastHeight = ctrlHeight

End If

If ctrlIsResizing Then

ctrlRectangle.Location = New System.Drawing.Point( Me .frm.DesktopLocation.X + Me .ctrl.Left + Me .Wtap, Me .frm.DesktopLocation.Y + Me .Htap + Me .ctrl.Top)

ctrlRectangle.Size = New System.Drawing.Size(ctrlLastWidth, ctrlLastHeight)

End If

ctrlIsResizing = True

<span

Published At
Categories with Web编程
Tagged with
comments powered by Disqus