C# 网页浏览器






4.67/5 (12投票s)
今天,我们将使用Visual Studio 2015中的Web Browser控件创建一个我们自己的(入门级)网页浏览器。
引言
C# Web Browser实际上提供了一个Internet Explorer控件,该控件具有不同的属性、方法和事件。
请参考以下链接以获取更多关于将Web Browser功能添加到Windows Forms应用程序的详细信息,同时我也建议您查看关于事件和委托的概述。
今天,我们将通过创建一个示例Windows Form应用程序来探索这些功能,该应用程序包含两个步骤:
- 第一步,我们将创建应用程序;
- 第二步/最后一步,我们将通过创建安装文件(使用InstallShield 2015)来部署它。
让我们开始创建应用程序
好的,让我们打开Visual Studio 2015(IDE),点击:[文件 > 新建 > 项目],新窗口将如下面的图片所示出现。
点击Windows Form Application,然后点击右下角的“确定”按钮。完成此过程后,将加载一个带有空窗体的项目。
接下来,我们将窗体的属性 `StartPosition` 设置为 `CenterScreen`,然后将 `WindowState` 更改为 `Maximized`。
现在,我们需要添加 `ToolStrip` 控件。 `ToolStrip` 控件提供Windows工具栏控件。好的,让我们转到工具箱(Toolbox),在“菜单和工具栏”(Menu & Toolbar)部分,您会找到它,将其拖放到窗体上。
在进行下一项任务之前,我们首先需要为项目资源添加一些图标。要做到这一点,右键单击项目名称:[属性 > 资源],然后从顶部的菜单将浏览文件类型更改为“图像”(Images),如下图所示。
现在,添加我们之前粘贴到资源文件夹中的图标。浏览并在此处导入这些图标,我们将用它们来创建我们的浏览器控件按钮。点击 [添加资源 > 添加现有文件 > 浏览]。
现在打开 `Form1`,是时候在 `ToolStrip` 控件中创建一些按钮了。要添加新按钮,请单击 `ToolStrip` 控件,然后单击下拉图标,然后单击“按钮”(Button)。这就是我们之前的按钮。
现在,一个新按钮已添加到 `ToolStrip` 控件中。要设置图标,请右键单击:[按钮 > 设置图像],然后选择“项目资源文件”,图标将设置到按钮上(我们的上一个按钮)。以同样的方式,让我们创建另外两个按钮:主页(Home)和下一个(Next)。
如果您想更改控件名称,请右键单击 `ToolStrip` 控件并转到属性。在此应用程序中,我保持原样。
让我们向 `ToolStrip` 控件添加一个 `comboBox`。
现在,通过转到控件的属性来设置 `comboBox` 的大小。
按照图:1.5,让我们创建接下来的三个按钮:前进(Go)、刷新(Reload)和打印(Print)按钮。
我们已经完成了浏览器操作按钮部分,现在让我们专注于浏览器页面的加载选项。我们需要在窗体窗口中添加一个Web Browser控件。
转到 [工具箱 > 常用控件 > WebBrowser],然后像下面一样拖放WebBrowser控件到窗体上。
现在,我们需要在窗体中添加 `statusStrip`。当用户输入URL并点击“前进”按钮时,它将显示页面加载进度。
转到 [工具箱 > 菜单和工具栏 > StatusStrip],然后像下面一样将 `statusStrip` 控件拖放到窗体上。
我们的UI设计几乎完成了。我们需要向 `statusStrip` 控件添加进度条。右键单击 `statusStrip` 控件并转到 [属性 > 项目] 点击“集合”(Collections),将出现一个名为项目集合编辑器(Items Collections Editor)的窗口。现在,像下图一样在此处添加进度条和状态标签。
删除状态标签的文本属性值“`toolStripStatusLabel1`”,然后点击“确定”。最后,我们的UI设计完成了。
现在,让我们为这个窗体控件添加一些机制,并根据用户请求查看网站。双击 `Form1 controlBar`。它将加载 `Form1_Load` 方法。
private void Form1_Load(object sender, EventArgs e)
{
toolStripButton1.Enabled = false;
toolStripButton2.Enabled = false;
}
在此方法中,有两行代码将在窗体启动时禁用“下一个”和“上一个”按钮的访问。以下代码示例是我们加载和显示Web Browser控件中网页的主要机制。
private void myBrowser()
{
if (toolStripComboBox1.Text != "")
Url = toolStripComboBox1.Text;
webBrowser1.Navigate(Url);
webBrowser1.ProgressChanged +=
new WebBrowserProgressChangedEventHandler(webpage_ProgressChanged);
webBrowser1.DocumentTitleChanged +=
new EventHandler(webpage_DocumentTitleChanged);
webBrowser1.StatusTextChanged += new EventHandler(webpage_StatusTextChanged);
webBrowser1.Navigated += new WebBrowserNavigatedEventHandler(webpage_Navigated);
webBrowser1.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(webpage_DocumentCompleted);
}
private void webpage_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.CanGoBack) toolStripButton1.Enabled = true;
else toolStripButton1.Enabled = false;
if (webBrowser1.CanGoForward) toolStripButton2.Enabled = true;
else toolStripButton2.Enabled = false;
toolStripStatusLabel1.Text = "Done";
}
private void webpage_DocumentTitleChanged(object sender, EventArgs e)
{
this.Text = webBrowser1.DocumentTitle.ToString();
}
private void webpage_StatusTextChanged(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = webBrowser1.StatusText;
}
private void webpage_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
toolStripProgressBar1.Maximum = (int)e.MaximumProgress;
toolStripProgressBar1.Value = ((int)e.CurrentProgress < 0 ||
(int)e.MaximumProgress < (int)e.CurrentProgress) ?
(int)e.MaximumProgress : (int)e.CurrentProgress;
}
private void webpage_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
toolStripComboBox1.Text = webBrowser1.Url.ToString();
}
这段示例代码将在点击“刷新”按钮时重新加载网页。
private void toolStripButton4_Click(object sender, EventArgs e)
{
webBrowser1.Refresh();
}
这段示例代码将在点击“前进”按钮时导航到网页的下一页。
private void toolStripButton2_Click(object sender, EventArgs e)
{
webBrowser1.GoForward();
}
这段示例代码将在点击“后退”按钮时导航到网页的上一页。
private void toolStripButton1_Click(object sender, EventArgs e)
{
webBrowser1.GoBack();
}
这段示例代码将在点击“主页”按钮时导航到主页。
private void toolStripButton5_Click(object sender, EventArgs e)
{
webBrowser1.GoHome();
}
这段示例代码将在点击“打印”按钮时显示网页的打印预览。
private void toolStripButton6_Click(object sender, EventArgs e)
{
webBrowser1.ShowPrintPreviewDialog();
}
最后,是合并后的类如下:
public partial class Form1 : Form
{
String Url = string.Empty;
public Form1()
{
InitializeComponent();
Url = "http://www.msn.com";
myBrowser();
}
private void Form1_Load(object sender, EventArgs e)
{
toolStripButton1.Enabled = false;
toolStripButton2.Enabled = false;
}
private void toolStripButton3_Click(object sender, EventArgs e)
{
myBrowser();
}
private void myBrowser()
{
if (toolStripComboBox1.Text != "")
Url = toolStripComboBox1.Text;
webBrowser1.Navigate(Url);
webBrowser1.ProgressChanged +=
new WebBrowserProgressChangedEventHandler(webpage_ProgressChanged);
webBrowser1.DocumentTitleChanged += new EventHandler(webpage_DocumentTitleChanged);
webBrowser1.StatusTextChanged += new EventHandler(webpage_StatusTextChanged);
webBrowser1.Navigated += new WebBrowserNavigatedEventHandler(webpage_Navigated);
webBrowser1.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(webpage_DocumentCompleted);
}
private void webpage_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.CanGoBack) toolStripButton1.Enabled = true;
else toolStripButton1.Enabled = false;
if (webBrowser1.CanGoForward) toolStripButton2.Enabled = true;
else toolStripButton2.Enabled = false;
toolStripStatusLabel1.Text = "Done";
}
private void webpage_DocumentTitleChanged(object sender, EventArgs e)
{
this.Text = webBrowser1.DocumentTitle.ToString();
}
private void webpage_StatusTextChanged(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = webBrowser1.StatusText;
}
private void webpage_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
toolStripProgressBar1.Maximum = (int)e.MaximumProgress;
toolStripProgressBar1.Value = ((int)e.CurrentProgress < 0 ||
(int)e.MaximumProgress < (int)e.CurrentProgress) ? (int)e.MaximumProgress : (int)e.CurrentProgress;
}
private void webpage_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
toolStripComboBox1.Text = webBrowser1.Url.ToString();
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
webBrowser1.Refresh();
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
webBrowser1.GoForward();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
webBrowser1.GoBack();
}
private void toolStripButton5_Click(object sender, EventArgs e)
{
webBrowser1.GoHome();
}
private void toolStripButton6_Click(object sender, EventArgs e)
{
webBrowser1.ShowPrintPreviewDialog();
}
}
我们的Web Browser应用程序完成了,现在我们将专注于创建一个新的Setup项目来部署应用程序进行安装。
输出
让我们部署应用程序
我们需要安装InstallShield。这是Visual Studio 2015的InstallShield Limited Edition。请在此处获取:InstallShield 2015。
为了部署应用程序,我们将创建一个新的Setup项目。转到解决方案资源管理器(Solution Explorer),右键单击“解决方案”(Solution),然后添加新项目。在“添加新项目”(Add new project)窗口中,浏览菜单到“其他类型项目”(Other Type Projects)。
它将加载“项目助手”(Project Assistant)窗口,该窗口将引导您创建安装文件。在第一个选项卡中提供应用程序信息。提供所有信息后,让我们转到“安装要求”(Installation Requirements)。在“要安装的软件”(software to be installed)部分(底部),我们将勾选“是”(yes)。我们将包含Microsoft .NET Framework 4.5完整包。
导航到下一个选项卡,即“应用程序文件”(Application Files)。在此部分,我们将包含我们的项目输出。要包含它,请点击“添加项目输出”(Add Project Outputs)按钮。像下图一样勾选“主输出”(primary output)。
接下来,我们将添加应用程序快捷方式图标来启动我们的应用程序。转到“应用程序快捷方式”(Application Shortcuts),点击“新建”(New),然后在下一个弹出窗口中,浏览目标文件。
浏览 [ProgramsFileFolder] > WebBrowser.Primary output。
重命名它,并勾选“[在桌面创建快捷方式]”(create shortcut on Desktop)。在这里,您可以勾选“[使用备用文件图标]”(User alternate file icon)来使用一个图标文件显示在桌面上。
创建另一个快捷方式来卸载应用程序,点击“[创建卸载快捷方式]”(Create an uninstallation shortcut),然后重命名它。
接下来,我们有“应用程序注册表”(Application Registry)选项卡,用于在注册表中创建一个键。由于这是一个示例Web浏览器,我们将保持此阶段不变。
在我们的下一个选项卡,也就是最后一个选项卡“安装问询”(Installation Interview),用于配置和显示许可协议对话框。
我们都完成了。让我们构建应用程序并安装安装文件,右键单击“Setup项目”,然后点击“安装”(Install)。
将出现安装步骤。
安装成功完成。
最后,应用程序快捷方式图标。
希望这能有所帮助。:)