2009-12-10 97 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()绘制边框但是这样做很笨拙,试试吧。 (此外,如果用户已关闭主题,则必须执行回退)