2009-12-10 75 views

回答

8

你可以用在PanelWebBrowser控制和設置Panel.BorderStyle屬性。

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

這是一種課程:) 但爲什麼所有控件都具有除webbrowser之外的邊框樣式? – Pygmy 2009-12-10 00:25:30

+3

網絡瀏覽器是特別的:-) – Kugel 2009-12-10 00:28:49

+0

這是任何沒有邊框樣式屬性的控件的方法。我甚至在RichTextBoxes和ComboBoxes上使用過它。 – Isuru 2012-11-21 10:44:02

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

其他邊框樣式也可以,請在SDK中查看WinUser.h。

+0

很好的答案。如果有人對我這樣的窗口不熟悉,我的WinUser.h就在這裏(可能是Visual Studio放在那裏):C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ Include \ – 2010-07-14 23:11:10

1

首先要知道IE 6單獨繪製邊框如果指定

< DOCTYPE HTML >或

體{邊框樣式:插圖;邊框寬度:2px的;保證金:0像素; }

但是,這不適用於較新的IE版本。

所以,如果你畫在C#中的邊界,並指定一個DOCTYPE必須設置

HTML,身體{邊界:0; }

否則你有兩個邊界中的IE 6.


漢斯的溶液(設置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,並且自XP以來不再生成兼容Theme的繪畫。

那麼如何獲得看起來像ListBox,ListView,TreeView等XP/Windows 7主題邊框(細藍色或綠色線條)的邊框,並在更改主題時更改顏色?

一個簡單的方法是在您希望瀏覽器出現,然後在表格寫位置插入表單設計器中一個列表框在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()繪製邊框但是這樣做很笨拙,試試吧。 (此外,如果用戶已關閉主題,則必須執行回退)