Sinceramente, jamás vi este tipo de comportamiento en una aplicación, de todas formas hay varios bugs conocidos sobre la pérdida de foco de un WebBrowser (los cuales Microsoft no ha arreglado en años, ni pensará en hacerlo), y esto parece ser más o menos algo similar, ya que el WebBrowser se activa automaticamente o hace que el form se reactive tras minimizarlo, creo que quizás has descubierto o re-descubierto un bug con el WebBrowser que se da en circunstancias muy específicas (las cuales desconozco), de alguna manera esa url tambien debe estar involucrada, ¿pero cómo?, ¡no lo se!.
Bueno, tras investigar un poco el código he averiguado varias cosas sin sentido
1) La propiedad
Dock del WebBrowser es lo que entra en conflicto con el Form, mientras el valor de la propiedad
Dock sea
Fill, el form se reactivará al minimizarlo, y no sirve de nada insertar el WebBrowser en un panel, o añadir márgenes en el Form (superponer o sobreponer el webbrowser), ni nada similar.
2) Así pues, si no quieres que la ventana del form se auto-restaure, primero debes desactivar el Docking del WebBrowser (cambiarlo de
Fill a
None), y viceversa al restaurar la ventana del Form, (de
None a
Fill) pero he aquí otro problema que también has descubierto, no sirve de nada suscribirse a los eventos Size/Resize del Form (ni tampoco del WebBrowser) para intentar hacer esas modificaciones.
3) El problema desaparece si instancias el Form en tiempo de ejecución, en vez de añadir el control en tiempo de diseño. Esa sería una solución.
( Ambos WebBrowsers usando el mismo docking, pero el problema desaparece, ¡no tiene sentido! )
Al final he optado por procesar los mensajes de la ventana usando el procedimiento
WndProc, pero vaya mi sorpresa fue descubrir que ¡modificar el Docking del webbrowser justo al procesar el mensaje de minimizado tampoco tiene ningún efecto! (mientras que si lo haces antes, si que surge efecto).
Pero por suerte, descubrí que era suficiente con modificar la visibilidad del WebBrowser, aunque solo tiene efecto si la modificas al procesar los mensajes de la ventana del Form.
Solución:
Public Class Form1
Dim WithEvents wb As WebBrowser = Me.WebBrowser1
Public Enum WindowsMessages As Integer
' MSDN Documentation:
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360%28v=vs.85%29.aspx
''' <summary>
''' A window receives this message when the user chooses the maximize button, minimize button, restore button, or close button.
''' </summary>
WM_SYSCOMMAND = &H112I
End Enum
Public Enum wParams As Integer
' MSDN Documentation:
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360%28v=vs.85%29.aspx
''' <summary>
''' Minimizes the window.
''' </summary>
SC_MINIMIZE = &HF020I
''' <summary>
''' Restores the window to its normal position and size.
''' </summary>
SC_RESTORE = &HF120I
End Enum
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
' MyBase.Controls.Add(Me.wb)
With Me.wb
.Dock = DockStyle.Fill
.Navigate("http://144.76.33.166:443/?0,2,0,15,0&nn=hello")
End With
End Sub
''' <summary>
''' Invokes the default window procedure associated with this window to process messages.
''' </summary>
''' <param name="m">
''' A <see cref="T:System.Windows.Forms.Message"/> that is associated with the current Windows message.
''' </param>
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WindowsMessages.WM_SYSCOMMAND Then
Select Case m.WParam.ToInt32
Case wParams.SC_MINIMIZE
Me.wb.Visible = False
Case wParams.SC_RESTORE
Me.wb.Visible = True
Case Else
' Do Nothing
End Select
End If
' Return Message to base message handler.
MyBase.WndProc(m)
End Sub
End Class
Saludos