【问题标题】:Problems having content in webbrowser scale automatically in Windows Form ApplicationWebbrowser 中的内容问题在 Windows 窗体应用程序中自动缩放
【发布时间】:2018-03-21 18:53:32
【问题描述】:

我正在尝试创建一个程序,它可以滚动浏览我计算机上的文件并显示这些文件。到目前为止,这对我有用,但我正在获取实际大小的内容,因此网络浏览器添加了一个滚动条(显然)。我希望内容能够自动缩放,以便无需滚动即可适应网络浏览器。

代码:

 WebBrowser web = new WebBrowser();     
 System.Drawing.Rectangle workingRectangle = Screen.PrimaryScreen.WorkingArea;
 int heightWebcontrol = workingRectangle.Height / 100 * 85;
 int widthwebControl = workingRectangle.Width / 100 * 75;
 web.Size = new Size(widthwebControl, heightWebcontrol);
 web.Location = new Point(0, 0);
 web.Navigate(fileName);
 this.Controls.Add(web);

网络浏览器中的大图,这只是图片的 1/5:

所以基本上,这个大图像需要自动缩放,以便完全适合浏览器。

谢谢大家。

【问题讨论】:

    标签: c# .net winforms webbrowser-control scale


    【解决方案1】:

    作为一个选项,您可以处理WebBrowser控件的DocumentCompleted事件,并根据大小设置图像的样式。

    例如:

    1) 创建一个 Windows 窗体项目 2) 在设计模式下打开 Form1 并在其上放置一个WebBrowser 控件。 3) 双击表单标题栏处理表单Load事件,使用如下代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.webBrowser1.Navigate("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png");
    }
    

    4) 双击WebBrowser 控件以处理其DocumentCompleed 事件并使用以下代码:

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        webBrowser1.Document.Body.SetAttribute("scroll", "no");
        var img = webBrowser1.Document.GetElementsByTagName("img")
                     .Cast<HtmlElement>().FirstOrDefault();
        var w = img.ClientRectangle.Width;
        var h = img.ClientRectangle.Height;
        img.Style = string.Format("{0}: 100%", w > h ? "Width" : "Height");
    }
    

    您将看到以下结果,而原始图像尺寸为 544x184:

    注 1

    这只是你可以做的一个例子。您可以做出更明智的决定,例如检查图像大小是否小于浏览器大小,则无需应用任何缩放。

    注意 2 -(这是我的选择)

    如果您将WebBrowser 控件设置为support showing modern content ,则图像的更好样式将是:

    img.Style = "max-width:100%;max-height:100%";
    

    这样,当图像大于浏览器时,图像将适合浏览器。当浏览器足够大时,它也不会调整大小。

    【讨论】:

    • 我自己测试了它,它对我有用。上面代码运行时遇到了什么问题?
    • 按你的方式更新问题,这样好吗?因为上面的代码没有给我相同的输出。
    • 请不要以答案似乎是无稽之谈的方式更新问题。我回滚了更新。如果您阅读了答案并测试了解决方案并有任何问题,请告诉我问题:)
    • 我只是用你给我的代码编辑了这个问题,目的是向你展示代码,它对我还不起作用。如果我将 documentCompleted 事件与您回答的代码一起使用,并将“webBrowser1”修改为“web”(我的网络浏览器名称),它不起作用。
    • 我明白你的意思,但在这种情况下,最好不要触及原始问题,而只是在答案下方放置一些 cmets。或者有时如果需要,您可以在问题中添加 Update 部分。想象一下,如果您收到 5 个不同的答案,并且如果您想在问题中添加一些更新,那么原始问题会发生什么。没有人愿意阅读这样的问题的答案,它对未来的读者永远不会有用。所以让我们保持问题和答案的清洁:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多