关于C#多页面浏览器
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace txj
{
public partial class My浏览器 : Form
{
private Browser browser;
public My浏览器()
{
InitializeComponent();
browser = new Browser(webBrowser);
}
private void tsp_btnBack_Click(object sender, EventArgs e)
{
browser.back();
}
private void tsp_btnForward_Click(object sender, EventArgs e)
{
browser.forward();
}
private void tsp_btnStop_Click(object sender, EventArgs e)
{
browser.stop();
}
private void tsp_btnRefresh_Click(object sender, EventArgs e)
{
browser.refresh();
}
private void tsp_btnHome_Click(object sender, EventArgs e)
{
browser.home();
}
private void tsp_btnGoto_Click(object sender, EventArgs e)
{
string str = tsp_cmbUrl.Text;
str = str.ToLower(); //转换为小写
if (str.StartsWith("http://") == false)
{
str = "http://" + str;
}
Uri MyUri = new Uri(str);
webBrowser.Navigate(MyUri);
}
private void tsp_cmbUrl_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
tsp_btnGoto_Click(sender, e);
}
}
private void tsp_cmbUrl_SelectedIndexChanged(object sender, EventArgs e)
{
tsp_btnGoto_Click(sender, e);
}
private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
tss_lable.Text = webBrowser.StatusText;
}
private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
string url = webBrowser.Url.ToString();
if (tsp_cmbUrl.Items.Count == 0 || tsp_cmbUrl.Items.Contains(url) == false)
{
tsp_cmbUrl.Items.Add(url);
}
tsp_cmbUrl.Text = url;
tss_pgsBar.Maximum = 100;
tss_pgsBar.Visible = true;
}
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
tss_lable.Text = "完成";
tss_lable.Visible = true;
tss_pgsBar.Visible = false;
this.tabControl.SelectedTab.Text = (sender as WebBrowser).DocumentTitle;
}
private void webBrowser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
this.tss_pgsBar.ProgressBar.Value = (int)(100 * e.CurrentProgress / e.MaximumProgress);
}
private void My浏览器_Load(object sender, EventArgs e)
{//进入主页
this.WindowState = FormWindowState.Maximized;
browser.home();
}
private void tsp_btnFav_Click(object sender, EventArgs e)
{
browser.addFav();
}
private WebBrowser showLinkAddress()
{
TabPage page = new TabPage();
page.Text = webBrowser.Document.Title.ToString();
this.tabControl.TabPages.Add(page);
WebBrowser wb = new WebBrowser();
page.Controls.Add(wb);
wb.Dock = DockStyle.Fill;
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);
wb.NewWindow += new CancelEventHandler(webBrowser_NewWindow);
return wb;
}
private void webBrowser_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
WebBrowser wb = showLinkAddress();
wb.Navigate((sender as WebBrowser).Document.ActiveElement.GetAttribute("href"));
tabControl.SelectedIndex = tabControl.TabPages.Count - 1;
}
private void 添加到收藏夹ToolStripMenuItem_Click(object sender, EventArgs e)
{
browser.addFav();
}
private void tabControl_DoubleClick(object sender, EventArgs e)
{
TabControl tb = (TabControl)(sender);
int i = tb.SelectedIndex;
tb.TabPages.RemoveAt(i);
}
}
}
下面是类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace txj
{
public class Browser
{
[DllImport("User32.DLL")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("User32.DLL")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
public int IDM_ADDFAVORITES = 2261;
public uint WM_COMMAND = 0x0111;
private System.Windows.Forms.WebBrowser myBrowser;
public Browser(System.Windows.Forms.WebBrowser webBrowser)
{
myBrowser = webBrowser;
}
public void back()
{
myBrowser.GoBack();
}
public void forward()
{
myBrowser.GoForward();
}
public void stop()
{
myBrowser.Stop();
}
public void refresh()
{
myBrowser.Refresh();
}
public void home()
{
myBrowser.GoHome();
}
public void addFav()
{
IntPtr vHandle = myBrowser.Handle;
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "Shell Embedding", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "Shell DocObject View", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "Internet Explorer_Server", null);
SendMessage(vHandle, WM_COMMAND, IDM_ADDFAVORITES, (int)vHandle);
}
}
}
现在遇到几个问题:(1)多页面后前进后退等操作都只在第一页进行。
(2) 网页标题是在页面完成后再给tabpage的,导致打开网页时,选择其他tabpage 则网页标题就给选中 的那个tabpage了。
本人新手,代码中还有问题的话 也请高手们指点下,谢谢!
--------------------编程问答-------------------- 在线等啊,高手们呢。 --------------------编程问答-------------------- 给你个建议...baidu下载一个有代码的... 自己再学习中改一下 --------------------编程问答--------------------
补充:.NET技术 , C#