将边框添加到WebBrowser控件

时间:2009-12-10 00:19:43

标签: c# winforms

当我在TabPage上添加WebBrowser控件时,它没有边框。 我找不到BorderStyle属性。 如何让控件有边框? (3D,沉没,无论如何)

Screenshot

只有右边的滚动条才能看到那里有一个控件...

3 个答案:

答案 0 :(得分:14)

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。

答案 1 :(得分:8)

您可以将WebBrowser控件包装在Panel中并设置Panel.BorderStyle属性。

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

答案 2 :(得分:1)

首先要注意,如果指定

,IE 6会单独绘制边框

<!DOCTYPE html>或

body {border-style:inset;边框宽度:2px的;保证金:0像素; }

但是对于较新的IE版本,这不再适用。

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

html,body {border: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;
    }
}

问题是在Windows 2000之前使用了凹陷的3D边框。但是随着XP的变化,UXTHEME.DLL绘制了所有控件而不是旧的USER32.DLL。 User.h中的所有控件绘制标志都用于Windows 2000,并且自XP以来不再生成与主题兼容的绘图。

那么如何获得看起来像ListBox,ListView,TreeView等的XP / Windows 7主题边框(一条细蓝线或绿线)的边框,并在更改主题时更改颜色?

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

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

这使浏览器成为列表框的子项。列表框绘制其边框,内部的浏览器绘制Html内容。

这种方式非常完美,与其他主题控件的外观相同,但有一点不利之处在于,调整窗体的大小会更加闪烁,因为现在还有一个控件需要绘制。

完美的解决方案是将DrawThemeBackground或DrawThemeEdge手动绘制边框或通过GetThemeColor获取边框颜色并使用System.Drawing.Graphics.DrawRectangle()绘制边框但是这非常笨拙所以我没有试试吧。 (另外,如果用户关闭了主题,则必须实现后备)