Изменить размер без полей
Я могу изменить размер, используя приведенный ниже код, но он изменяется в направлении к правой стороне, из правого нижнего угла
Я хочу изменить код, чтобы пользователь мог изменить размер формы в левом нижнем углу.
также большинство решений, представленных на этом сайте, основаны на 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
1 ответ
Что вы можете сделать, это приостановить макет управления (Suspend.Layout) в соответствии с http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout%28VS.80%29.aspx может быть в состоянии остановить мерцание.