1
我可以使用下面的代码调整,但它会调整朝向右侧,从右下角调整无边框形式
我想修改代码,以便用户可以重新大小从左下角形式。
此网站上给出的大部分解决方案都基于WndProc/WM_NCLBUTTONDOWN,我没有使用它,因为我的窗体有很多控件,所以它闪烁非常严重。
Private Shared frmLastWidth As Integer = 0
Private Shared frmLastHeight As Integer = 0
Private Shared frmWidth As Integer
Private Shared frmHeight As Integer
Private Shared frmIsResizing As Boolean = False
Private frmRectangle As New System.Drawing.Rectangle()
Private Sub ResizeMe_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ResizeMe.MouseUp
If frmIsResizing Then
frmRectangle.Location = New System.Drawing.Point(Me.Left, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmWidth, frmHeight)
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, System.Windows.Forms.FrameStyle.Dashed)
Me.Width = frmWidth
Me.Height = frmHeight
frmIsResizing = False
End If
End Sub
Private Sub ResizeMe_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ResizeMe.MouseDown
frmRectangle.Location = New System.Drawing.Point(Me.Left, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmWidth, frmHeight)
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, System.Windows.Forms.FrameStyle.Dashed)
End Sub
Private Sub ResizeMe_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ResizeMe.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
'Me.ResizeRedraw = false
Dim sizeageX As Integer = MousePosition.X - Me.Location.X
Dim sizeageY As Integer = MousePosition.Y - Me.Location.Y
' Use this to restrict Width
If sizeageX < Me.MinimumSize.Width Then
sizeageX = Me.MinimumSize.Width
End If
' Use this to restrict Height
If sizeageY < Me.MinimumSize.Height Then
sizeageY = Me.MinimumSize.Height
End If
frmWidth = sizeageX
frmHeight = sizeageY
If frmLastWidth = 0 Then
frmLastWidth = frmWidth
End If
If frmLastHeight = 0 Then
frmLastHeight = frmHeight
End If
If frmIsResizing Then
frmRectangle.Location = New System.Drawing.Point(Me.Left, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmLastWidth, frmLastHeight)
End If
frmIsResizing = True
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, System.Windows.Forms.FrameStyle.Dashed)
frmLastWidth = frmWidth
frmLastHeight = frmHeight
frmRectangle.Location = New System.Drawing.Point(Me.Left, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmWidth, frmHeight)
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, System.Windows.Forms.FrameStyle.Dashed)
End Sub
Private Sub ResizeRight(ByVal e As System.Windows.Forms.MouseEventArgs)
'Me.ResizeRedraw = false
Dim sizeageX As Integer = (MousePosition.X + Me.Width) - Me.Location.X
Dim sizeageY As Integer = (MousePosition.Y + Me.Height) - Me.Location.Y
' Use this to restrict Width
If sizeageX < Me.MinimumSize.Width Then
sizeageX = Me.MinimumSize.Width
End If
' Use this to restrict Height
If sizeageY < Me.MinimumSize.Height Then
sizeageY = Me.MinimumSize.Height
End If
frmWidth = sizeageX
frmHeight = sizeageY
If frmLastWidth = 0 Then
frmLastWidth = frmWidth
End If
If frmLastHeight = 0 Then
frmLastHeight = frmHeight
End If
If frmIsResizing Then
frmRectangle.Location = New System.Drawing.Point(Me.Left, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmLastWidth, frmLastHeight)
End If
frmIsResizing = True
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, System.Windows.Forms.FrameStyle.Dashed)
frmLastWidth = frmWidth
frmLastHeight = frmHeight
frmRectangle.Location = New System.Drawing.Point(Me.Left, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmWidth, frmHeight)
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, System.Windows.Forms.FrameStyle.Dashed)
End If
End Sub
更新
我能够重新大小的形式左下角,但它示出了虚线多次也虚线不限制到窗体的最小高度和宽度的改性代码是
Private Sub ResizeRight(ByVal e As System.Windows.Forms.MouseEventArgs)
'Me.ResizeRedraw = false
Dim sizeageX As Integer = MousePosition.X + Me.Location.X
Dim sizeageY As Integer = MousePosition.Y + Me.Location.Y
' Use this to restrict Width
If sizeageX > Me.MinimumSize.Width Then
sizeageX = Me.MinimumSize.Width
End If
' Use this to restrict Height
If sizeageY > Me.MinimumSize.Height Then
sizeageY = Me.MinimumSize.Height
End If
frmWidth = sizeageX - e.X
frmHeight = sizeageY - e.Y
If frmLastWidth = 0 Then
frmLastWidth = frmWidth
End If
If frmLastHeight = 0 Then
frmLastHeight = frmHeight
End If
If frmIsResizing Then
frmRectangle.Location = New System.Drawing.Point(Me.Left + e.X, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmLastWidth, frmLastHeight)
End If
frmIsResizing = True
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, System.Windows.Forms.FrameStyle.Dashed)
frmLastWidth = frmWidth
frmLastHeight = frmHeight
frmRectangle.Location = New System.Drawing.Point(Me.Left + e.X, Me.Top)
frmRectangle.Size = New System.Drawing.Size(frmWidth, frmHeight)
ControlPaint.DrawReversibleFrame(frmRectangle, Color.Black, system.Windows.Forms.FrameStyle.Dashed)
End Sub