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.ToString)
>
> If Me.Location.X + Me.Width >
> System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width Then
> Debug.WriteLine("Too far right")
> Me.Location = New
> System.Drawing.Point(System.Windows.Forms.Screen.PrimaryScreen.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.Location.X, 0)
> Debug.WriteLine(Me.Location.X & " " & Me.Location.Y)
> End If
>
> End If
> MyBase.WndProc(m)
> Catch ex As System.ArgumentException
> MsgBox(ex.ToString)
> Catch ex As Exception
> MsgBox(ex.ToString)
> End Try
> End Sub
|