WinForm本是一门很早的技术(目前仍然实用),似乎是2005年伴随.NET2.0一起出现的。随后出现的WPF、ADO.NET等相关技术也很多很多,但WinForm依然屹立。
那为什么要在WinForm内嵌网页呢?在开发一些绚丽的界面效果时,HTML会更加便捷、强大。
直接奔入主题吧,如何在WinForm中显示网页呢?
1、将WebBrowser控件拖入到主窗体中。
2、在控件的url属性中输入目标地址,如www.baidu.com。此时F5启动。即可看到百度的首页了。
3、接下来就需要调整一些属性、来让这次网页嵌入看起来更完善些
- WebBrowserShortcutsEnabled 是否启用某些快捷键,例如“F5”刷新
- ScrollBarsEnabled 是否应该有滚动条
- Locked 是否可以移动控件或调整控件的大小
- AllowWebBrowserDrop 是否打开托放在其上的文件
- IsWebBrowserContextMenuEnabled 是否关闭右键快捷菜单
- ScriptErrorsSuppressed 设为true,防止控件显示网页脚本代码的错误信息
4、网页和客户端的双向通信(如果你想在WinForm中展示自己的网站)
-网页调用客户端的代码
1. 在窗体构造函数或Load事件处理程序中设置ObjectForScripting属性(下面代码将窗体类自身用于脚本对象)
public Form1()
{
InitializeComponent();
webBrowser1.ObjectForScripting = this;
}
2、在类的前面加入 [System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.InteropServices.ComVisible(true)]
public partial class Form1 : Form
{
}
3、编写客户端中的代码
public void InvokeFormMethod(string message)
{
MessageBox.Show(message,"WinForm控件");
}
4、在网页里调用
<input type="button" value="调用winform的方法" onclick="window.external.InvokeFormMethod('Called WinForm Code')" >
客户端调用网页里的函数
1、在网页内编写函数
<script>
function msgalert(msg)
{
alert(msg);
}
</script>
2、客户端调用网页中的函数
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Document.InvokeScript("msgalert", new string[] { "Called Javascript code" });
}
其他的一些琐碎知识点
打开新页面时如何防止弹出默认浏览器呢?
调用WebBrowser的NewWindow事件。在准备弹出新页面时,取消弹出并用当前的WebBrowser打开新页面
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
webBrowser1.Navigate(webBrowser1.StatusText);
}
如何你想在自己的网页中播放视频,但是无法正常播放时。试着升级下IE版本(WebBrowser默认使用的是IE7.0),在网页中的head/title标签中加入
<META http-equiv="X-UA-Compatible" content="IE=9" > </META>
尚未解决的问题,忘路过的大佬们指点一二…:)
我在用自己的WinForm程序访问CSDN时,进入主页没有问题。但是点击访问其他人的博客时,会弹出窗口提示“堆栈溢出,位置:第三行”,然后页面无法打开。如下图