2009-12-10 3 views
5

Когда я добавляю элемент управления WebBrowser на моей вкладке, у него нет границы. Я не могу найти атрибут BorderStyle. Как получить контроль над границей? (3D, впалые, независимо)Добавить Border в элемент управления WebBrowser

Screenshot http://i47.tinypic.com/2m7dpj4.png

Только по скроллинга справа вы видите там на самом деле контроль там ...

ответ

8

Вы можете обернуть контроль WebBrowser в Panel и установите Panel.BorderStyle имущество.

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

Это способ общения :) Но почему у всех элементов управления есть пограничный стиль, кроме веб-браузера? – Pygmy

+3

Веб-браузер особенный :-) – Kugel

+0

Это способ управления любым элементом управления, который не имеет свойства стиля границы. Я использовал его только на RichTextBoxes и ComboBoxes. – Isuru

13

Gumpy комментарии, неточно. Добавьте новый класс в свой проект и вставьте код, показанный ниже. Компиляция. Отбросьте новый элемент управления сверху панели инструментов на форму.

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; 
    } 
    } 
} 

Другие стили границы тоже работают, проверьте WinUser.h в SDK.

+0

Хороший ответ. Если вы новичок в таких окнах, как я, мой WinUser.h был здесь (вероятно, это была визуальная студия): C: \ Program Files \ Microsoft SDK \ Windows \ v7.0A \ Include \ –

1

Прежде всего следует помнить, что IE 6 рисует границу в одиночку, если вы укажете

< DOCTYPE HTML > или

тело {границы стиля: вставка; границы ширина: 2px; Маржа: 0px; }

Но это больше не работает с новыми версиями IE.

Так что, если вы рисуете границу в C# и указать DOCTYPE вы должны установить

HTML, тело {границы: 0; }

иначе вы имеете две границы в IE 6.


Решения Hans (для установки WS_BORDER) производит некрасивую черную границу.

Если вы хотите затонувшее 3D границу самым простым решением является следующее:

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

Проблема заключается в том, что затонувший 3D граница использовалась до Windows 2000. Но все изменилось с XP, где UXTheme. DLL рисует все элементы управления, а не старый добрый USER32.DLL. Все флаги управления изображением в User.h использовались до Windows 2000 и с тех пор не выпускают совместимую с Theme картину.

Итак, как получить границу, которая выглядит как граница раздела темы XP/Windows 7 в ListBox, ListView, TreeView и т. Д. (Тонкая синяя или зеленая линия) и изменяет цвет при смене темы?

легко раствор, чтобы вставить ListBox в конструкторе форм в VS в том месте, где вы хотите, чтобы браузер появляться, а затем записать в форме:

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

Это делает браузер быть ребенком список. В списке отображается его граница, а браузер внутри - содержимое Html.

Это прекрасно работает и выглядит так же, как и другие элементы управления, но небольшим недостатком является то, что изменение размера формы мерцает больше, потому что теперь есть еще один элемент управления.

Идеальное решение заключается в том, чтобы вырезать DrawThemeBackground или DrawThemeEdge для рисования границы вручную или для получения цвета границы с помощью GetThemeColor и нарисовать границу с помощью System.Drawing.Graphics.DrawRectangle() Но это довольно неуклюжий, Попробуй. (Дополнительно вы должны были бы реализовать резерв, если пользователь отключил темы)

Смежные вопросы