从WebBrowser控件中去除边框

7
我有一个WebBrowser控件,它位于一个窗体上,但是它周围有一个令人烦恼的2像素内嵌边框。这导致我的内容在右侧和底部被剪切了4像素,而我无法弄清楚如何摆脱它。控件本身没有任何BorderStyle属性——如何删除边框?
请看屏幕截图中的红色区域: 让它停止!http://img229.imageshack.us/img229/8342/badbadwebbrowser.gif 我想让WebBrowser看起来像蓝色区域——即填充窗体并与窗体的边缘相平齐。
4个回答

5

IE将其作为body标签上默认样式的一部分绘制出来。在body元素上设置border:0px,它就会消失。

值得庆幸的是,这在IE9中已经消失了。


好的,你说得对。我一直在重置边距和填充,但没有移除可能存在于HTML或body元素上的任何边框。谢谢! - Zack The Human
你能不能在页面上添加CSS,或者基于CSS的方法不起作用?你可以通过编程的方式从应用程序中添加CSS来实现这一点。 - Zack The Human
如果您使用<!DOCTYPE html>并且使用嵌入式浏览器,则此方法无法在MSIE 9上运行。 - Elmue
这个回答已经是7年前的了。 - i_am_jorf

3

WebBrowser控件继承自控件类的显示风格。如果您想控制控件的边框样式,可以使用类似以下代码的方式,例如在Form.Designer.cs文件中:


    using System;
    using System.ComponentModel;
    using System.Windows.Forms;

    public class wbExt : System.Windows.Forms.WebBrowser
    {
        private BorderStyle _borderStyle;
        [
        Category("Appearance"),
        Description("The border style")
        ]

        public BorderStyle BorderStyle
        {
            get
            {
                return _borderStyle;
            }
            set
            {
                _borderStyle = value;
                this.RecreateHandle();
                Invalidate();
            }
        }

        protected override CreateParams CreateParams
        {
            get
            {
                const int WS_BORDER = 0x00800000;
                const int WS_EX_STATICEDGE = 0x00020000;
                CreateParams cp = base.CreateParams;
                switch (_borderStyle)
                {
                    case BorderStyle.FixedSingle:
                        cp.Style |= WS_BORDER;
                        break;
                    case BorderStyle.Fixed3D:
                        cp.ExStyle |= WS_EX_STATICEDGE;
                        break;
                }
                return cp;
            }
        }

        public wbExt()
        {
        }
    }

现在你可以在表单类中更改生成的代码。
private wbExt webBrowser1;

and rewrite creation of webBrowser item in InitializeComponent of form, like that:

this.webBrowser1 = new WindowsFormsApplication1.wbExt();

So, now
webBrowser1.BorderStyle = BorderStyle.None;
will remove any borders from webBrowser control.


感谢您提供的代码示例。事实证明,我的真正问题出在我加载到控件中的文档上,而不是控件本身。 - Zack The Human
这个答案完全是错误的。我们在这里讨论的边框是浏览器控件内部的,而不是外部的。 - Elmue

3

我通过在html元素中添加border:none;样式属性解决了相同的问题。

<html style="border:none;">

我一开始尝试将其添加到body元素中,但不起作用,但它可以在根html元素上工作。

在Windows XP上使用WebBrowser对象的IE版本(我认为是版本6)默认将根html元素解释为具有边框。如果您直接控制WebBrowser中显示的网页,则可以直接向页面的HTML源添加样式属性 - 就像我所做的那样 - 如果没有,应该有一种方法在应用程序侧编程地编辑WebBrowser内部的HTML。


这在IE 9上不起作用。唯一去除那个愚蠢边框的方法是删除<!DOCTYPE html>。 - Elmue

-1

我无法复现您所描述的外观。我的代码在Form1.Designer.cs中是:

    this.webBrowser1.Location = new System.Drawing.Point(0, 0);
    this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
    this.webBrowser1.Name = "webBrowser1";
    this.webBrowser1.ScrollBarsEnabled = false;
    this.webBrowser1.Size = new System.Drawing.Size(141, 125);
    this.webBrowser1.TabIndex = 0;
    this.webBrowser1.Uri = ....

网控件显示时没有边框...我正在使用VS 2008 SP1/Windows 7。

也许你应该尝试将控件放在一个容器内,比如一个面板。


1
在XP上查看您的表单,您将会看到与问题中完全相同的效果。Win7不显示边框。 - HasanG
@Hasan:这与Windows版本无关,而取决于浏览器版本! - Elmue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接