2009-12-10 31 views

Respuesta

8

Usted puede envolver el control WebBrowser en un Panel y establecer el Panel.BorderStyle propiedad.

Panel panel1 = new Panel(); 
panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; 
panel1.Controls.Add(webbrowser1); 
+0

Esa es una forma, por supuesto :) ¿Pero por qué todos los controles tienen un estilo de borde excepto el navegador web? – Pygmy

+3

El navegador web es especial :-) – Kugel

+0

Esta es la forma de realizar cualquier control que no tenga propiedad de estilo de borde. Lo he usado en RichTextBoxes y ComboBoxes incluso. – Isuru

13

Comentarios de Gumpy, no precisos. Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. Coloque el nuevo control desde la parte superior de su barra de herramientas en su formulario.

using System; 
using System.Windows.Forms; 

class MyWebBrowser : WebBrowser { 
    protected override CreateParams CreateParams { 
    get { 
     var parms = base.CreateParams; 
     parms.Style |= 0x800000; // Turn on WS_BORDER 
     return parms; 
    } 
    } 
} 

Los otros estilos de borde también funcionan, echa un vistazo a WinUser.h en el SDK.

+0

Buena respuesta. Si uno es nuevo en Windows como yo, mi WinUser.h estaba aquí (probablemente visual studio lo puso allí): C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v7.0A \ Include \ –

1

En primer lugar tenga en cuenta que IE 6 pinta la frontera solo si se especifica

< html DOCTYPE > o

body {border-style: inserción; ancho del borde: 2px; margen: 0px; }

Pero esto ya no funciona con las nuevas versiones de IE.

Por lo tanto, si la pintura de la frontera en C# y especifica un DOCTYPE debe establecer

html, body {border: 0; }

de lo contrario tienen dos fronteras en IE 6.


La solución de Hans (para ajustar WS_BORDER) produce un borde negro feo.

Si desea dejar un borde 3D hundido la solución más sencilla es la siguiente:

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams i_Parms = base.CreateParams; 
     i_Parms.ExStyle |= 0x200; // WS_EX_CLIENTEDGE 
     return i_Parms; 
    } 
} 

El problema es que la frontera 3D hundido fue utilizado hasta Windows 2000. Sin embargo, las cosas cambiaron con XP donde el UxTheme. La DLL pinta todos los controles en lugar del antiguo USER32.DLL. Todas las banderas de pintura de control en User.h se usaron hasta Windows 2000 y ya no producen pintura compatible con Theme desde XP.

Entonces, ¿cómo conseguir un borde que se parece a la frontera 7 Theme XP/Windows del cuadro de lista, ListView, TreeView, etc, (una delgada línea azul o verde) y cambia el color cuando se cambia el tema?

Una solución fácil es insertar un cuadro de lista en el diseñador de la forma en VS en el lugar donde desea que el navegador que aparezca y luego escribir en su Forma:

protected override void OnLoad(EventArgs e) 
{ 
    .... 
    listBox.IntegralHeight = false; 
    webBrowser.Parent = listBox; 
    webBrowser.Dock = DockStyle.Fill; 
} 

Esto hace que el navegador sea un niño de el listbox. El cuadro de lista pinta su borde y el navegador interior pinta el contenido Html.

Esto funciona perfecto y se ve de la misma manera que los otros controles temáticos, pero una pequeña desventaja es que cambiar el tamaño de la forma parpadea más porque hay un control más para pintar ahora.

La solución perfecta sería pinvoke DrawThemeBackground o DrawThemeEdge para pintar el borde manualmente o para obtener el color del borde por GetThemeColor y pintar el borde con System.Drawing.Graphics.DrawRectangle() Pero esto es bastante torpe, así que no lo hice lo intento. (Además, debería implementar una alternativa si el usuario ha desactivado los temas)

Cuestiones relacionadas