C# 向WebBrowser控件添加边框

C# 向WebBrowser控件添加边框,c#,winforms,C#,Winforms,当我在TabPage上添加WebBrowser控件时,它没有边框。 我找不到BorderStyle属性。 如何使控件具有边界?(3D,凹陷,随便什么) 只有通过右侧的滚动条,您才能看到实际上有一个控件…您可以将该控件包装为一个,然后设置属性 Panel panel1 = new Panel(); panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; panel1.Controls.Add(webbrowser1); 粗

当我在TabPage上添加WebBrowser控件时,它没有边框。 我找不到BorderStyle属性。 如何使控件具有边界?(3D,凹陷,随便什么)

只有通过右侧的滚动条,您才能看到实际上有一个控件…

您可以将该控件包装为一个,然后设置属性

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

粗俗的评论,不准确。向项目中添加一个新类并粘贴如下所示的代码。编译。将新控件从工具栏顶部拖到窗体上

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。

首先要知道,如果您指定,IE 6只绘制边框

正文{边框样式:插图;边框宽度:2px;边距:0px;}

但这在更新的IE版本中不再适用

因此,如果用C#绘制边框并指定DOCTYPE,则必须设置

html,正文{边框:0;}

否则,在IE 6中有两个边界


Hans的解决方案(设置WS_边界)产生了一个丑陋的黑色边界

如果需要凹陷的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以来不再生成与主题兼容的绘制

那么,如何获得一个类似于ListBox、ListView、TreeView等的XP/Windows7主题边框(一条蓝色或绿色的细线),并在更改主题时更改颜色呢

一个简单的解决方案是在VS中的表单设计器中,在希望浏览器出现的位置插入一个列表框,然后在表单中写入:

protected override void OnLoad(EventArgs e)
{
    ....
    listBox.IntegralHeight = false;
    webBrowser.Parent = listBox;
    webBrowser.Dock   = DockStyle.Fill;
}
这使浏览器成为列表框的子项。列表框绘制其边框,浏览器内部绘制Html内容

这项工作非常完美,看起来与其他主题控件的方式相同,但有一点缺点是,调整窗体的大小会闪烁更多,因为现在还有一个控件需要绘制


完美的解决方案是pinvoke DrawThemeBackground或DrawThemeEdge手动绘制边框,或者通过获取颜色来获取边框颜色,并使用System.Drawing.Graphics.DrawRectangle()绘制边框,但这相当笨拙,所以我没有尝试。(另外,如果用户已关闭主题,则必须实施回退)

这当然是一种方式:)但为什么除了webbrowser之外,所有控件都有边框样式?这是处理任何没有边框样式属性的控件的方法。我甚至在RichTextBox和ComboBox上使用过它。回答得好。如果像我这样的windows新手,我的WinUser.h就在这里(可能是visual studio放在那里):C:\Program Files\Microsoft SDK\windows\v7.0A\Include\