Using IE within a Windows Forms application
Changed this blog posting into an article. It's just too long for a post, and might be handy to keep around...
Everytime I'm busy with something I think: hmmm, would be nice to share this.. but one way or the other the time just isn't there. I will try harder...
I'm working on a simple windows forms app to browse some of the hierarchies of SharePoint Portal Server 2003, and besides a tree control on the left side I needed a browser control at the right side to display some detail information in HTML. Of course you can add the Internet Explorer dll shdocvw.dll to the toolbox so a wrapper is generated... but there are some problems left like what values to pass for all those parameters and how do I handle events that are raised.
One of the .Net world famous programmers Lutz Roeder, developer of Reflector (http://www.aisto.com/roeder/dotnet) did write a class encapsulating the Internet Explorer Active-X control that is used in Reflector. Although he did not publish the source code (as far as I know), this file came on the web one way or the other. I found it at the following link:
The code follows below, together with some code how to use it....
// Lutz Roeders's .NET Reflector, October 2000. // Copyright (C) 2000-2002 Lutz Roeder. All rights reserved. // http://www.aisto.com/roeder/dotnet // [email protected] namespace Reflector.Library { using System; using System.IO; using System.Runtime.InteropServices; using System.Windows.Forms; public class HtmlBrowser : AxHost, IWebBrowserEvents { public event BrowserNavigateEventHandler BeforeNavigate; public event BrowserNavigateEventHandler NavigateComplete; IWebBrowser control = null; ConnectionPointCookie cookie; Boolean activate = false; String url = String.Empty; String html = String.Empty; String body = String.Empty; public HtmlBrowser() : base("8856f961-340a-11d0-a96b-00c04fd705a2") { HandleCreated += new EventHandler(Me_HandleCreated); NavigateComplete += new BrowserNavigateEventHandler(Me_NavigateComplete); } public void Activate() { activate = true; } public void Navigate(string url) { if (!IsHandleCreated) { this.url = url; return; } Object flags = 0; Object targetFrame = String.Empty; Object postData = String.Empty; Object headers = String.Empty; control.Navigate(url, ref flags, ref targetFrame, ref postData, ref headers); } public void SetHtmlText(string text) { this.html = text; } public void SetBodyText(string text) { if (control != null) { IHTMLDocument2 document = control.GetDocument(); if (document != null) { IHTMLElement body = document.GetBody(); if (body != null) { if (activate) DoVerb(-4); body.SetInnerHTML(text); return; } } } this.body = text; } void Me_HandleCreated(Object s, EventArgs e) { HandleCreated -= new EventHandler(Me_HandleCreated); if (url == String.Empty) { url = Path.GetTempFileName(); StreamWriter writer = new StreamWriter(url, false); writer.WriteLine(html); writer.Flush(); writer.Close(); } Navigate(url); } void Me_NavigateComplete(Object s, BrowserNavigateEventArgs e) { if (activate) DoVerb(-4); if (html != String.Empty) { File.Delete(url); this.html = String.Empty; } if (body != String.Empty) { SetBodyText(body); this.body = String.Empty; } } protected override void CreateSink() { try { cookie = new ConnectionPointCookie(GetOcx(), this, typeof(IWebBrowserEvents)); } catch { } } protected override void DetachSink() { try { cookie.Disconnect(); } catch { } } protected override void AttachInterfaces() { try { control = (IWebBrowser) GetOcx(); } catch { } } protected override Boolean IsInputKey(Keys keyData) { return (keyData == Keys.Escape) ? false : base.IsInputKey(keyData); } public void RaiseBeforeNavigate(String url, int flags, String targetFrameName, ref Object postData, String headers, ref Boolean cancel) { BrowserNavigateEventArgs e = new BrowserNavigateEventArgs(url, false); if (BeforeNavigate != null) BeforeNavigate(this, e); cancel = e.Cancel; } public void RaiseNavigateComplete(String url) { BrowserNavigateEventArgs e = new BrowserNavigateEventArgs(url, false); if (NavigateComplete != null) NavigateComplete(this, e); } } [Guid("eab22ac2-30c1-11cf-a7eb-0000c05bae0b"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IWebBrowserEvents { [DispId(100)] void RaiseBeforeNavigate(String url, int flags, String targetFrameName, ref Object postData, String headers, ref Boolean cancel); [DispId(101)] void RaiseNavigateComplete(String url); } public delegate void BrowserNavigateEventHandler(Object s, BrowserNavigateEventArgs e); public class BrowserNavigateEventArgs { String url; Boolean cancel; public BrowserNavigateEventArgs(String url, Boolean cancel) { this.url = url; this.cancel = cancel; } public String Url { get { return url; } } public Boolean Cancel { set { cancel = value; } get { return cancel; } } } [Guid("eab22ac1-30c1-11cf-a7eb-0000c05bae0b")] interface IWebBrowser { void GoBack(); void GoForward(); void GoHome(); void GoSearch(); void Navigate(String Url, ref Object Flags, ref Object targetFrame, ref Object postData, ref Object headers); void Refresh(); void Refresh2(); void Stop(); void GetApplication(); void GetParent(); void GetContainer(); [return: MarshalAs(UnmanagedType.Interface)] IHTMLDocument2 GetDocument(); } [Guid("332C4425-26CB-11D0-B483-00C04FD90119"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual), ComVisible(true)] interface IHTMLDocument2 { [return: MarshalAs(UnmanagedType.Interface)] Object GetScript(); [return: MarshalAs(UnmanagedType.Interface)] Object GetAll(); [return: MarshalAs(UnmanagedType.Interface)] IHTMLElement GetBody(); [return: MarshalAs(UnmanagedType.Interface)] Object GetActiveElement(); [return: MarshalAs(UnmanagedType.Interface)] Object GetImages(); [return: MarshalAs(UnmanagedType.Interface)] Object GetApplets(); [return: MarshalAs(UnmanagedType.Interface)] Object GetLinks(); [return: MarshalAs(UnmanagedType.Interface)] Object GetForms(); [return: MarshalAs(UnmanagedType.Interface)] Object GetAnchors(); void SetTitle([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetTitle(); [return: MarshalAs(UnmanagedType.Interface)] Object GetScripts(); void SetDesignMode([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetDesignMode(); [return: MarshalAs(UnmanagedType.Interface)] Object GetSelection(); [return: MarshalAs(UnmanagedType.BStr)] String GetReadyState(); [return: MarshalAs(UnmanagedType.Interface)] Object GetFrames(); [return: MarshalAs(UnmanagedType.Interface)] Object GetEmbeds(); [return: MarshalAs(UnmanagedType.Interface)] Object GetPlugins(); void SetAlinkColor([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetAlinkColor(); void SetBgColor([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetBgColor(); void SetFgColor([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetFgColor(); void SetLinkColor([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetLinkColor(); void SetVlinkColor([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetVlinkColor(); [return: MarshalAs(UnmanagedType.BStr)] String GetReferrer(); [return: MarshalAs(UnmanagedType.Interface)] Object GetLocation(); [return: MarshalAs(UnmanagedType.BStr)] String GetLastModified(); void SetURL([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetURL(); void SetDomain([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetDomain(); void SetCookie([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetCookie(); void SetExpando([In, MarshalAs(UnmanagedType.Bool)] Boolean p); [return: MarshalAs(UnmanagedType.Bool)] Boolean GetExpando(); void SetCharset([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetCharset(); void SetDefaultCharset([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetDefaultCharset(); [return: MarshalAs(UnmanagedType.BStr)] String GetMimeType(); [return: MarshalAs(UnmanagedType.BStr)] String GetFileSize(); [return: MarshalAs(UnmanagedType.BStr)] String GetFileCreatedDate(); [return: MarshalAs(UnmanagedType.BStr)] String GetFileModifiedDate(); [return: MarshalAs(UnmanagedType.BStr)] String GetFileUpdatedDate(); [return: MarshalAs(UnmanagedType.BStr)] String GetSecurity(); [return: MarshalAs(UnmanagedType.BStr)] String GetProtocol(); [return: MarshalAs(UnmanagedType.BStr)] String GetNameProp(); void DummyWrite([In, MarshalAs(UnmanagedType.I4)] int psarray); void DummyWriteln([In, MarshalAs(UnmanagedType.I4)] int psarray); [return: MarshalAs(UnmanagedType.Interface)] Object Open([In, MarshalAs(UnmanagedType.BStr)] String URL, [In, MarshalAs(UnmanagedType.Struct)] Object name, [In, MarshalAs(UnmanagedType.Struct)] Object features, [In, MarshalAs(UnmanagedType.Struct)] Object replace); void Close(); void Clear(); [return: MarshalAs(UnmanagedType.Bool)] Boolean QueryCommandSupported([In, MarshalAs(UnmanagedType.BStr)] String cmdID); [return: MarshalAs(UnmanagedType.Bool)] Boolean QueryCommandEnabled([In, MarshalAs(UnmanagedType.BStr)] String cmdID); [return: MarshalAs(UnmanagedType.Bool)] Boolean QueryCommandState([In, MarshalAs(UnmanagedType.BStr)] String cmdID); [return: MarshalAs(UnmanagedType.Bool)] Boolean QueryCommandIndeterm([In, MarshalAs(UnmanagedType.BStr)] String cmdID); [return: MarshalAs(UnmanagedType.BStr)] String QueryCommandText([In, MarshalAs(UnmanagedType.BStr)] String cmdID); [return: MarshalAs(UnmanagedType.Struct)] Object QueryCommandValue([In, MarshalAs(UnmanagedType.BStr)] String cmdID); [return: MarshalAs(UnmanagedType.Bool)] Boolean ExecCommand([In, MarshalAs(UnmanagedType.BStr)] String cmdID, [In, MarshalAs(UnmanagedType.Bool)] Boolean showUI, [In, MarshalAs(UnmanagedType.Struct)] Object value); [return: MarshalAs(UnmanagedType.Bool)] Boolean ExecCommandShowHelp([In, MarshalAs(UnmanagedType.BStr)] String cmdID); [return: MarshalAs(UnmanagedType.Interface)] Object CreateElement([In, MarshalAs(UnmanagedType.BStr)] String eTag); void SetOnhelp([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnhelp(); void SetOnclick([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnclick(); void SetOndblclick([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOndblclick(); void SetOnkeyup([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnkeyup(); void SetOnkeydown([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnkeydown(); void SetOnkeypress([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnkeypress(); void SetOnmouseup([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmouseup(); void SetOnmousedown([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmousedown(); void SetOnmousemove([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmousemove(); void SetOnmouseout([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmouseout(); void SetOnmouseover([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmouseover(); void SetOnreadystatechange([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnreadystatechange(); void SetOnafterupdate([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnafterupdate(); void SetOnrowexit([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnrowexit(); void SetOnrowenter([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnrowenter(); void SetOndragstart([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOndragstart(); void SetOnselectstart([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnselectstart(); [return: MarshalAs(UnmanagedType.Interface)] Object ElementFromPoint([In, MarshalAs(UnmanagedType.I4)] int x, [In, MarshalAs(UnmanagedType.I4)] int y); [return: MarshalAs(UnmanagedType.Interface)] Object GetParentWindow(); // IHTMLWindow2 [return: MarshalAs(UnmanagedType.Interface)] Object GetStyleSheets(); void SetOnbeforeupdate([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnbeforeupdate(); void SetOnerrorupdate([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnerrorupdate(); [return: MarshalAs(UnmanagedType.BStr)] String toString(); [return: MarshalAs(UnmanagedType.Interface)] Object CreateStyleSheet([In, MarshalAs(UnmanagedType.BStr)] String bstrHref, [In, MarshalAs(UnmanagedType.I4)] int lIndex); } [Guid("3050F1FF-98B5-11CF-BB82-00AA00BDCE0B"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual), ComVisible(true)] interface IHTMLElement { void SetAttribute([In, MarshalAs(UnmanagedType.BStr)] String strAttributeName, [In, MarshalAs(UnmanagedType.Struct)] Object AttributeValue, [In, MarshalAs(UnmanagedType.I4)] int lFlags); void GetAttribute([In, MarshalAs(UnmanagedType.BStr)] String strAttributeName, [In, MarshalAs(UnmanagedType.I4)] int lFlags, [Out, MarshalAs(UnmanagedType.LPArray)] Object[] pvars); [return: MarshalAs(UnmanagedType.Bool)] Boolean RemoveAttribute([In, MarshalAs(UnmanagedType.BStr)] String strAttributeName, [In, MarshalAs(UnmanagedType.I4)] int lFlags); void SetClassName([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetClassName(); void SetId([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetId(); [return: MarshalAs(UnmanagedType.BStr)] String GetTagName(); [return: MarshalAs(UnmanagedType.Interface)] IHTMLElement GetParentElement(); [return: MarshalAs(UnmanagedType.Interface)] Object GetStyle(); // IHTMLStyle void SetOnhelp([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnhelp(); void SetOnclick([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnclick(); void SetOndblclick([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOndblclick(); void SetOnkeydown([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnkeydown(); void SetOnkeyup([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnkeyup(); void SetOnkeypress([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnkeypress(); void SetOnmouseout([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmouseout(); void SetOnmouseover([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmouseover(); void SetOnmousemove([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmousemove(); void SetOnmousedown([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmousedown(); void SetOnmouseup([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnmouseup(); [return: MarshalAs(UnmanagedType.Interface)] Object GetDocument(); void SetTitle([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetTitle(); void SetLanguage([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetLanguage(); void SetOnselectstart([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnselectstart(); void ScrollIntoView([In, MarshalAs(UnmanagedType.Struct)] Object varargStart); [return: MarshalAs(UnmanagedType.Bool)] Boolean Contains([In, MarshalAs(UnmanagedType.Interface)] IHTMLElement pChild); [return: MarshalAs(UnmanagedType.I4)] int GetSourceIndex(); [return: MarshalAs(UnmanagedType.Struct)] Object GetRecordNumber(); void SetLang([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetLang(); [return: MarshalAs(UnmanagedType.I4)] int GetOffsetLeft(); [return: MarshalAs(UnmanagedType.I4)] int GetOffsetTop(); [return: MarshalAs(UnmanagedType.I4)] int GetOffsetWidth(); [return: MarshalAs(UnmanagedType.I4)] int GetOffsetHeight(); [return: MarshalAs(UnmanagedType.Interface)] IHTMLElement GetOffsetParent(); void SetInnerHTML([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetInnerHTML(); void SetInnerText([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetInnerText(); void SetOuterHTML([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetOuterHTML(); void SetOuterText([In, MarshalAs(UnmanagedType.BStr)] String p); [return: MarshalAs(UnmanagedType.BStr)] String GetOuterText(); void InsertAdjacentHTML([In, MarshalAs(UnmanagedType.BStr)] String where, [In, MarshalAs(UnmanagedType.BStr)] String html); void InsertAdjacentText([In, MarshalAs(UnmanagedType.BStr)] String where, [In, MarshalAs(UnmanagedType.BStr)] String text); [return: MarshalAs(UnmanagedType.Interface)] IHTMLElement GetParentTextEdit(); [return: MarshalAs(UnmanagedType.Bool)] Boolean GetIsTextEdit(); void Click(); [return: MarshalAs(UnmanagedType.Interface)] Object GetFilters(); void SetOndragstart([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOndragstart(); [return: MarshalAs(UnmanagedType.BStr)] String toString(); void SetOnbeforeupdate([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnbeforeupdate(); void SetOnafterupdate([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnafterupdate(); void SetOnerrorupdate([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnerrorupdate(); void SetOnrowexit([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnrowexit(); void SetOnrowenter([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnrowenter(); void SetOndatasetchanged([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOndatasetchanged(); void SetOndataavailable([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOndataavailable(); void SetOndatasetcomplete([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOndatasetcomplete(); void SetOnfilterchange([In, MarshalAs(UnmanagedType.Struct)] Object p); [return: MarshalAs(UnmanagedType.Struct)] Object GetOnfilterchange(); [return: MarshalAs(UnmanagedType.Interface)] Object GetChildren(); [return: MarshalAs(UnmanagedType.Interface)] Object GetAll(); } }
And now some example code describing how to use it... I created a window with a tree control at the left, the Internet Explorer at the right and a splitter in the middle so the controls can be resized dynamically...
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; using Reflector.Library; namespace SPS2Admin { ////// Summary description for SPS2Admin. /// public class SPS2Admin : System.Windows.Forms.Form { ////// An Internet Explorer embedded browser instance is used for displaying detail information. /// private HtmlBrowser _htmlBrowser; ////// The tree for navigating SPS structures. /// private TreeView spsTree; private System.Windows.Forms.MainMenu mainMenu; private System.Windows.Forms.MenuItem menuItemFile; private System.Windows.Forms.MenuItem menuItemView; private System.Windows.Forms.MenuItem menuItemFileConnect; private System.Windows.Forms.MenuItem menuItemFileExit; private System.Windows.Forms.MenuItem menuItemViewWebs; private System.Windows.Forms.MenuItem menuItemCurrentCredentials; private System.Windows.Forms.MenuItem menuItemCreateProgram; private System.Windows.Forms.MenuItem menuItemNavigator; ////// Required designer variable. /// private System.ComponentModel.Container components = null; public SPS2Admin() { // // Required for Windows Form Designer support // InitializeComponent(); _htmlBrowser = new HtmlBrowser(); _htmlBrowser.Parent = this; _htmlBrowser.Dock = DockStyle.Fill; Splitter split = new Splitter(); split.Parent = this; split.Dock = DockStyle.Left; split.BackColor = SystemColors.Control; spsTree = new TreeView(); spsTree.Parent = this; spsTree.Dock = DockStyle.Left; _htmlBrowser.Navigate("http://www.macaw.nl"); } : : } }
I did display only some relevant part of the code... this should do the job, no "design time" control, but hey.. who needs that!
Update:
I got a solution from Julien CHEYSSIAL to resolve the problem concerning controls like textbox,
combobox which were displayed with the old looking style while using the WebBrowser in a Windows Form application. You have to add this meta in the head section of your pages : <META HTTP-EQUIV="MSThemeCompatible" Content="Yes">. See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnie60/html/whatsnewpublicpreview.asp and http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/cookbook.asp for more info.
posted on Sunday, August 31, 2003 3:50 PM
Feedback
# re: Using IE within a Windows Forms application 4/3/2004 8:19 AM Patrick Tisseghem
You are certainly going to love the WebBrowser control in VS.NET 2005! No more low-level plumbing - nice, clean managed class!