Change of Form Location Using System.Drawing.Point Ignored When FormMaximized

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Marc the Demi-Programmer

    Change of Form Location Using System.Drawing.Point Ignored When FormMaximized

    I am overriding WncProc to make sure my form's location stays within
    specified parameters. Basically, it has to stay at the top of the
    screen and not be off to either of the sides. All that works when the
    form is in its minimal size. However, when the form is maximized using
    the appropriate button the code that is supposed to set the location is
    ignored. When the form is switched back to the standard dimensions
    through the restore button the location setting works again. My
    debugging information shows that the code used to set the location is
    processed when the form is maximized, as it is when the form is not
    maximized. I do not get any error messages. Here is my code:

    Protected Overrides Sub WndProc(ByRef m As System.Windows. Forms.Message)
    Const WM_SIZE As Integer = &H5
    Const WM_MOVE As Integer = &H3
    Const SIZE_MINIMIZED As Integer = 1
    Const SIZE_MAXIMIZED As Integer = 2
    Const WM_EXITSIZEMOVE As Integer = 562
    Const WM_SYSCOMMAND As Integer = 274
    Try


    If m.Msg = WM_EXITSIZEMOVE Or m.Msg = WM_SYSCOMMAND Then
    Debug.WriteLine ("msg" & " " & m.Msg & " " &
    m.WParam.ToStri ng)

    If Me.Location.X + Me.Width >
    System.Windows. Forms.Screen.Pr imaryScreen.Bou nds.Width Then
    Debug.WriteLine ("Too far right")
    Me.Location = New
    System.Drawing. Point(System.Wi ndows.Forms.Scr een.PrimaryScre en.Bounds.Width
    - Me.Width, 0)
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    ElseIf Me.Location.X < 0 Then
    Debug.WriteLine ("Too far left")
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    Me.Location = New System.Drawing. Point(0, 0)
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    Else
    Debug.WriteLine ("Something else")
    Me.Location = New
    System.Drawing. Point(Me.Locati on.X, 0)
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    End If

    End If
    MyBase.WndProc( m)
    Catch ex As System.Argument Exception
    MsgBox(ex.ToStr ing)
    Catch ex As Exception
    MsgBox(ex.ToStr ing)
    End Try
    End Sub
  • Marc the Demi-Programmer

    #2
    Re: Change of Form Location Using System.Drawing. Point Ignored WhenForm Maximized

    After some experimentation I find that if the size of the window when
    the program starts is set for the maximum size then the desired behavior
    happens only when the window has been sized to the maximum. It appears
    that whenever the form is put into the restored state, i.e., not
    minimized or maximized, then any code that attempts to change the
    location of the form is ignored, even though all other code in the same
    sub, even debug code below and above the location change code, is executed.

    Marc the Demi-Programmer wrote:
    I am overriding WncProc to make sure my form's location stays within
    specified parameters. Basically, it has to stay at the top of the
    screen and not be off to either of the sides. All that works when the
    form is in its minimal size. However, when the form is maximized using
    the appropriate button the code that is supposed to set the location is
    ignored. When the form is switched back to the standard dimensions
    through the restore button the location setting works again. My
    debugging information shows that the code used to set the location is
    processed when the form is maximized, as it is when the form is not
    maximized. I do not get any error messages. Here is my code:
    >
    Protected Overrides Sub WndProc(ByRef m As System.Windows. Forms.Message)
    Const WM_SIZE As Integer = &H5
    Const WM_MOVE As Integer = &H3
    Const SIZE_MINIMIZED As Integer = 1
    Const SIZE_MAXIMIZED As Integer = 2
    Const WM_EXITSIZEMOVE As Integer = 562
    Const WM_SYSCOMMAND As Integer = 274
    Try
    >
    >
    If m.Msg = WM_EXITSIZEMOVE Or m.Msg = WM_SYSCOMMAND Then
    Debug.WriteLine ("msg" & " " & m.Msg & " " &
    m.WParam.ToStri ng)
    >
    If Me.Location.X + Me.Width >
    System.Windows. Forms.Screen.Pr imaryScreen.Bou nds.Width Then
    Debug.WriteLine ("Too far right")
    Me.Location = New
    System.Drawing. Point(System.Wi ndows.Forms.Scr een.PrimaryScre en.Bounds.Width
    - Me.Width, 0)
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    ElseIf Me.Location.X < 0 Then
    Debug.WriteLine ("Too far left")
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    Me.Location = New System.Drawing. Point(0, 0)
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    Else
    Debug.WriteLine ("Something else")
    Me.Location = New
    System.Drawing. Point(Me.Locati on.X, 0)
    Debug.WriteLine (Me.Location.X & " " & Me.Location.Y)
    End If
    >
    End If
    MyBase.WndProc( m)
    Catch ex As System.Argument Exception
    MsgBox(ex.ToStr ing)
    Catch ex As Exception
    MsgBox(ex.ToStr ing)
    End Try
    End Sub

    Comment

    Working...