изменить размер без полей - PullRequest
       21

изменить размер без полей

1 голос
/ 08 октября 2010

Я могу изменить размер, используя приведенный ниже код, но он изменяется в правую сторону, из правого нижнего угла

Я хочу изменить код, чтобы пользователь мог изменить размер формы в левом нижнем углу.

также большинство решений, представленных на этом сайте, основаны на 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 Ответ

0 голосов
/ 08 октября 2010

Что вы можете сделать, это приостановить макет управления (Suspend.Layout) в соответствии с http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout%28VS.80%29.aspx Это может остановить мерцание.

...