⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlviewpane.cs

📁 全功能c#编译器
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Mike Kr黦er" email="mike@icsharpcode.net"/>
//     <version value="$version"/>
// </file>

using System;
using System.Drawing;
using System.Windows.Forms;

using ICSharpCode.SharpDevelop.Internal.Undo;
using System.Drawing.Printing;
using ICSharpCode.Core.Properties;

using ICSharpCode.Core.Services;
using ICSharpCode.Core.AddIns.Codons;
using ICSharpCode.SharpDevelop.Gui;

namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
{
	public class BrowserPane : AbstractViewContent
	{
		protected HtmlViewPane htmlViewPane;
		
		public override Control Control {
			get {
				return htmlViewPane;
			}
		}
		
		public override bool IsDirty {
			get {
				return false;
			}
			set {
			}
		}
		
		public override bool IsViewOnly {
			get {
				return true;
			}
		}
		
		protected BrowserPane(bool showNavigation)
		{
			htmlViewPane = new HtmlViewPane(showNavigation);
			htmlViewPane.AxWebBrowser.TitleChange += new DWebBrowserEvents2_TitleChangeEventHandler(TitleChange);
		}
		
		public BrowserPane() : this(true)
		{
		}
		
		public override void Dispose()
		{
			htmlViewPane.Dispose();
		}
		
		public override void Load(string url)
		{
			htmlViewPane.Navigate(url);
		}
		
		public override void Save(string url)
		{
			Load(url);
		}
		
		void TitleChange(object sender, DWebBrowserEvents2_TitleChangeEvent e)
		{
			TitleName = e.text;
		}
	}
	
	public class HtmlViewPane : UserControl
	{
		AxWebBrowser axWebBrowser = null;
		
		Panel   topPanel   = new Panel();
		ToolBar toolBar    = new ToolBar();
		TextBox urlTextBox = new TextBox();
		
		bool   isHandleCreated  = false;
		string lastUrl     = null;
		
		public AxWebBrowser AxWebBrowser {
			get {
				return axWebBrowser;
			}
		}
		
		protected override void Dispose(bool disposing)
		{
			base.Dispose(disposing);
			if (disposing) {
				axWebBrowser.Dispose();
			}
		}
		
		public HtmlViewPane(bool showNavigation)
		{
			Dock = DockStyle.Fill;
			Size = new Size(500, 500);
			
			if (showNavigation) {
				
				topPanel.Size = new Size(Width, 25);
				topPanel.Dock = DockStyle.Top;
				
				Controls.Add(topPanel);
				
				toolBar.Dock = DockStyle.None;
				
				
				for (int i = 0; i < 4; ++i) {
					ToolBarButton toolBarButton = new ToolBarButton();
					toolBarButton.ImageIndex    = i;
					toolBar.Buttons.Add(toolBarButton);
				}
				
				ResourceService resourceService = (ResourceService)ServiceManager.Services.GetService(typeof(IResourceService));
				toolBar.ImageList = new ImageList();
				toolBar.ImageList.ColorDepth = ColorDepth.Depth32Bit;
				toolBar.ImageList.Images.Add(resourceService.GetBitmap("Icons.16x16.BrowserBefore"));
				toolBar.ImageList.Images.Add(resourceService.GetBitmap("Icons.16x16.BrowserAfter"));
				toolBar.ImageList.Images.Add(resourceService.GetBitmap("Icons.16x16.BrowserCancel"));
				toolBar.ImageList.Images.Add(resourceService.GetBitmap("Icons.16x16.BrowserRefresh"));
				
				toolBar.Appearance = ToolBarAppearance.Flat;
				toolBar.Divider = false;
				toolBar.ButtonClick += new ToolBarButtonClickEventHandler(ToolBarClick);
				
				toolBar.Location = new Point(0, 0);
				toolBar.Size = new Size(4*toolBar.ButtonSize.Width, 25);
				
				topPanel.Controls.Add(toolBar);
				
				urlTextBox.Location  = new Point(4*toolBar.ButtonSize.Width, 2);
				urlTextBox.Size      = new Size(Width - (4*toolBar.ButtonSize.Width) - 1, 21);
				urlTextBox.Anchor    = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
				urlTextBox.KeyPress += new KeyPressEventHandler(KeyPressEvent);
				
				topPanel.Controls.Add(urlTextBox);
				
			} 
			
			axWebBrowser = new AxWebBrowser();
			axWebBrowser.BeginInit();
//			if (showNavigation) {
//				int height = 48;
//				axWebBrowser.Location = new Point(0, height);
//				axWebBrowser.Size     = new Size(Width, Height - height); 
//				axWebBrowser.Anchor   = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top;
//				axWebBrowser.Dock     = DockStyle.Fill;
//			} else {
				axWebBrowser.Dock = DockStyle.Fill;
//			}
			axWebBrowser.HandleCreated += new EventHandler(this.CreatedWebBrowserHandle);
			axWebBrowser.TitleChange   += new DWebBrowserEvents2_TitleChangeEventHandler(TitleChange);
			
			Controls.Add(axWebBrowser);
			
			if (showNavigation) {
				Controls.Add(topPanel);
			}
			
			axWebBrowser.EndInit();
		}
		
		void TitleChange(object sender, DWebBrowserEvents2_TitleChangeEvent e)
		{
			urlTextBox.Text = axWebBrowser.LocationURL;
		}
		
		void KeyPressEvent(object sender, KeyPressEventArgs ex)
		{
			if (ex.KeyChar == '\r') {
				Navigate(urlTextBox.Text);
			}
		}
		
		void ToolBarClick(object sender, ToolBarButtonClickEventArgs e)
		{
			try {
				switch(toolBar.Buttons.IndexOf(e.Button)) {
					case 0:
						axWebBrowser.GoBack();
						break;
					case 1:
						axWebBrowser.GoForward();
						break;
					case 2:
						axWebBrowser.Stop();
						break;
					case 3:
						axWebBrowser.CtlRefresh();
						break;
				}
			} catch (Exception) {
			}
		}
		
		public void CreatedWebBrowserHandle(object sender, EventArgs evArgs) 
		{
			isHandleCreated = true;
			if (lastUrl != null) {
				Navigate(lastUrl);
			}
		}
		
		public void Navigate(string name)
		{
			if (!isHandleCreated) {
				lastUrl = name;
				return;
			}
			urlTextBox.Text = name;
			object arg1 = 0; 
			object arg2 = ""; 
			object arg3 = ""; 
			object arg4 = "";
			try {
				axWebBrowser.Navigate(name, ref arg1, ref arg2, ref arg3, ref arg4);
			} catch (Exception e) {
				Console.WriteLine(e.ToString());
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -