tengo un problema con el control webbrowser
hice un programa para ver solo una pagina en especial con un form1 y un webbrowser1
pero cuando quiero minimizar la ventana esta regresa a como estaba antes, pasa de minimized a normal automaticamente
esto solo pasa cuando la pagina esta cargada y con esa pagina en especial
con alguna otra pagina no tengo ese problema
como puedo evitar que pase esto?
tambien queria saber si hay alguna forma de detectar el error 404 en el webbrowser mediante codigo
Gracias :P
Cita de: darky666 en 24 Enero 2015, 17:15 PMhice un programa para ver solo una pagina en especial con un form1 y un webbrowser1
pero cuando quiero minimizar la ventana esta regresa a como estaba antes, pasa de minimized a normal automaticamente
esto solo pasa cuando la pagina esta cargada y con esa pagina en especial
con alguna otra pagina no tengo ese problema
como puedo evitar que pase esto?
Muestra tú código, y la página en cuestión.
Cita de: darky666 en 24 Enero 2015, 17:15 PMtambien queria saber si hay alguna forma de detectar el error 404 en el webbrowser mediante codigo
No, no es posible.
Tienes dos opciones:
1) Realizar una petición HTTP antes de navegar en el WebBrowser control, para parsear la respuesta del server:
'...
Dim response As HttpWebResponse = request.GetResponse()
If response.StatusCode = HttpStatusCode.OK Then
...
End If
2) Usar la interface
COM de
SHDocVw.WebBrowser:
Primero referencia al proyecto
Microsoft Internet Controls(http://i.imgur.com/qAl3Mre.png)
Y luego...:
Public NotInheritable Class TestForm ' WebBrowser Test Form by Elektro
Friend WithEvents wb As Windows.Forms.WebBrowser
Friend WithEvents wbAX As SHDocVw.WebBrowser
Private ReadOnly uri As New Uri("http://foro.elhacker.net/404/")
''' <summary>
''' Handles the Load event of the TestForm control.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
Private Sub TestForm_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Me.wb = New Windows.Forms.WebBrowser
With Me.wb
.Dock = DockStyle.Fill
End With
MyBase.Controls.Add(Me.wb)
Me.wbAX = DirectCast(Me.wb.ActiveXInstance, SHDocVw.WebBrowser)
End Sub
Private Sub TestForm_Shown(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Shown
Me.wbAX.Navigate(Me.uri.AbsoluteUri)
End Sub
''' <summary>
''' Handles the <see cref="SHDocVw.WebBrowser.NavigateError"/> event of the <see cref="wbAX"/> object.
''' MSDN Documentation:
''' https://msdn.microsoft.com/en-us/library/bb268221%28v=vs.85%29.aspx
''' https://msdn.microsoft.com/en-us/library/bb268233%28v=vs.85%29.aspx
''' </summary>
''' <param name="pDisp">
''' Object that evaluates to the top-level or frame WebBrowser object corresponding to the failed navigation.
''' </param>
''' <param name="url">
''' String expression that evaluates to the URL for which navigation failed.
''' </param>
''' <param name="frame">
''' String that evaluates to the name of the frame in which the resource is to be displayed,
''' or Null if no named frame is targeted for the resource.
''' </param>
''' <param name="statusCode">
''' Integer that contains a status code corresponding to the error, if available.
''' For a list of the possible status codes, see https://msdn.microsoft.com/en-us/library/bb268233%28v=vs.85%29.aspx.
''' </param>
''' <param name="cancel">
''' Boolean that specifies whether to cancel the navigation to an error page and/or any further autosearch.
''' </param>
Private Sub WbAX_NavigateError(ByVal pDisp As Object,
ByRef url As Object,
ByRef frame As Object,
ByRef statusCode As Object,
ByRef cancel As Boolean) Handles wbAX.NavigateError
Select Case CInt(statusCode)
Case 404I
cancel = True
MessageBox.Show("Server has returned a 404 HTTP status code.",
Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
Case -2146697211I ' INET_E_RESOURCE_NOT_FOUND
cancel = True
' ...
Case Else
' ...
End Select
End Sub
End Class
los 2 ejemplos que pusiste en codigo son muy buenos gracias
bueno aqui esta el codigo donde la ventana pasa de minimizada a normal por si sola
WebBrowser1.Navigate("http://144.76.33.166:443/?0,2,0,15,0&nn=hello")
cabe mencionar que esta pagina usa flash
Cuando digo que muestres el código me refiero a todo lo que sea relevante al problema, por ejemplo si estás minimizando/restaurando el Form mediante código (o haciendolo en un MDI donde tengas el WebBrowser), etc, a menos que realmente solo sea relevante esa instrucción que mostraste... claro está.
Explica los pasos a seguir para intentar reproducir el problema, porque lo que comentas que te sucede es algo muy raro ...al menos sin conocer más información sobre la app, danos también un poco más de información respecto a la app, ¿es un WinForms?, una imagen también estaría bien.
Saludos
si es un windowsform normal
este proyecto solo tiene un form y solo tiene un control llamado webbrowser1 y en el form_load este codigo
WebBrowser1.Navigate("http://144.76.33.166:443/?0,2,0,15,0&nn=hello")
y a la hora de minimizar el form1 este regresa a su estado original por si solo
aca te dejo el source del proyecto http://www8.zippyshare.com/v/Aj8nAuUu/file.html (http://www8.zippyshare.com/v/Aj8nAuUu/file.html)
ya he intentado en el form_resize añadir codigo para arreglar esto pero el codigo de este evento se ejecuta hasta lo ultimo y no viene sirviendo de nada el codigo de este evento
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
Gracias bro la verdad te la rifaste ;-)
Gracias