当前位置:编程学习 > C#/ASP.NET >>

关于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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,