调整无边框形式

时间:2010-10-07 20:27:12

标签: vb.net winforms resize borderless

我可以使用下面的代码调整大小,但是从右下角向右侧调整大小

我想修改代码,以便用户可以从左下角重新调整表单大小。

此网站上提供的大多数解决方案都基于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 :(得分:0)

你可以做的是根据http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout%28VS.80%29.aspx暂停控制布局(Suspend.Layout) 这可能能够阻止闪烁。