resize borderless form
I am able to resize the from using the code below but it resizes towards right side , from bottom right corner
i want to modify the code so that user can re size the form from bottom left corner.
also most of the solution given on this site are based on WndProc / WM_NCLBUTTONDOWN and i am not using it because my form have lots of controls so it flicker's very badly.
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 = Fa开发者_StackOverflowlse
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
Update
i was able to re size the form bottom left corner but it shows the dashed lines many times also the dashed lines does not restrict to minimum height and width of the form the modified code is
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
What you could do is suspend the Control Layout (Suspend.Layout) according to http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout%28VS.80%29.aspx That might be able to stop the flickering.
精彩评论