Het besturingselement Webbrowser gebruiken om Office-documenten te openen in Visual C# 2005 of in Visual C# .NET

Zie 304643 voor een .NET-versie van Microsoft Visual Basic van dit artikel.

Samenvatting

Mogelijk wilt u een Microsoft Office-document rechtstreeks in een Microsoft Visual C#-formulier weergeven of insluiten. Microsoft Visual C# 2005 en Microsoft Visual C# .NET bieden geen OLE-besturingselement waarmee u een Office-document in een formulier kunt insluiten. Als u een bestaand document wilt insluiten en wilt openen als een in-place ActiveX-documentobject in een Visual C#-formulier, kunt u het besturingselement Microsoft WebBrowser gebruiken.

In dit artikel wordt gedemonstreerd hoe u naar een bestaand Office-document bladert en hoe u het kunt weergeven in een Visual C#-formulier met behulp van het besturingselement Webbrowser.

Meer informatie

ActiveX-documenten zijn ingesloten OLE-objecten die zich meer gedragen als ActiveX-besturingselementen dan traditionele OLE-objecten. In tegenstelling tot een traditioneel ingesloten object is een ActiveX-document niet ontworpen als een ingesloten object in een groter document. In plaats daarvan wordt het beschouwd als een volledig document dat alleen wordt bekeken (zoals met Microsoft Internet Explorer) of wordt verzameld in één resource met andere documenten (zoals een Microsoft Office Binder-bestand). Een ActiveX-document dat wordt gehost in het besturingselement Webbrowser is altijd actief; Daarom is er, in tegenstelling tot traditionele OLE-ingesloten objecten, geen gevoel van in-place activering.

Hoewel Visual C# 2005 en Visual C# .NET momenteel geen ondersteuning bieden voor het rechtstreeks hosten van ActiveX-documenten, kunt u hiervoor het besturingselement WebBrowser gebruiken. Het besturingselement WebBrowser (Shdocvw.dll) maakt deel uit van Internet Explorer en kan alleen worden gebruikt op systemen waarop Internet Explorer is geïnstalleerd.

Een Visual C#-toepassing maken waarmee Office-documenten worden geopend

Voer de volgende stappen uit om een Visual C#-toepassing te maken waarmee Office-documenten worden geopend:

  1. Maak een nieuw Windows-toepassingsproject in Visual C# 2005 of in Visual C# .NET. Form1 wordt standaard gemaakt.

    Opmerking Als u in Visual C# 2005 het SHDocVw.dll-bestand of het AxSHDocVw.dll bestand niet kunt vinden, voert u de volgende opdracht uit bij de Visual Studio-opdrachtprompt:

    aximp %WINDIR%\system32\shdocvw.dll
    

    Maak vervolgens een algemene runtimeproxy (SHDocVw.dll) en een Windows Forms-proxy (AxSHDocVw.dll) voor het besturingselement Microsoft Webbrowser. Voer de volgende stappen uit om de DLL-bestanden toe te voegen in Visual C# 2005:

    1. Klik in het menu Project op Verwijzing toevoegen.
    2. Klik in het dialoogvenster Verwijzing toevoegen op Bladeren.
    3. Zoek en selecteer vervolgens het AxSHDocVw.dll-bestand en het SHDocVw.dll-bestand.
    4. Als u projectverwijzingen voor deze twee bestanden wilt toevoegen, klikt u op OK.
  2. Klik in het menu Extra op ToolBox aanpassen om het dialoogvenster ToolBox aanpassen te openen. Voeg op het tabblad COM-onderdelen een verwijzing toe naar Microsoft WebBrowser. Klik op OK om het besturingselement WebBrowser toe te voegen aan de werkset Windows Forms. Het besturingselement WebBrowser wordt weergegeven met de tekstverkenner in de werkset.

    Opmerking In Visual Studio 2005 hoeft u stap 2 niet uit te voeren.

  3. Voeg met behulp van de werkset een webbrowserbesturingselement, een OpenFileDialog-besturingselement en een CommandButton-besturingselement toe aan Form1. Hiermee worden de lidvariabelen AxWebBrowser1, OpenFileDialog1 en Button1 toegevoegd aan de klasse Form1. In Visual C# 2005 worden de lidvariabelen webBrowser1, openFileDialog1 en button1 toegevoegd.

  4. Dubbelklik op Formulier1 op Knop1. Hiermee wordt de Button1_Click gebeurtenis toegevoegd aan Form1.

  5. Voeg in het codevenster voor Form1 de volgende naamruimte toe aan de lijst:

    using System.Reflection;
    
  6. Definieer als volgt een privélid in klasse Form1:

    private Object oDocument;
    
  7. Voeg aan het einde van de methode InitializeComponent van klasse Form1 de volgende code toe om de gebeurtenissen Form1_Load, Form1_Closed en axWebBrowser1_NavigateComplete2 af te handelen:

    this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Closed += new System.EventHandler(this.Form1_Closed);
    
  8. Vervang de volgende code

    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    
    

    Met:

    private void button1_Click(object sender, System.EventArgs e)
    {
    
    String  strFileName;
    
    //Find the Office document.
     openFileDialog1.FileName = "";
     openFileDialog1.ShowDialog();
     strFileName = openFileDialog1.FileName;
    
    //If the user does not cancel, open the document.
     if(strFileName.Length != 0)
     {
      Object refmissing = System.Reflection.Missing.Value;
      oDocument = null;
      axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
     }
    }
    
    public void Form1_Load(object sender, System.EventArgs e)
    {
     button1.Text = "Browse";
     openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ;
     openFileDialog1.FilterIndex = 1;
    }
    
    public void Form1_Closed(object sender, System.EventArgs e)
    {
     oDocument = null;
    }
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    
    //Note: You can use the reference to the document object to 
     //      automate the document server.
    
    Object o = e.pDisp;
    
    oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    
    Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    
    Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    
    MessageBox.Show("File opened by: " + oName.ToString() ); 
    }
    
    

    Opmerking U moet de code wijzigen in Visual Studio 2005. In Visual C# wordt standaard één formulier aan het project toegevoegd wanneer u een Windows Forms project maakt. Het formulier heeft de naam Form1. De twee bestanden die het formulier vertegenwoordigen, hebben de naam Form1.cs en Form1.designer.cs. U schrijft de code in Form1.cs. Het bestand Form1.designer.cs is de locatie waar de Windows Forms Designer de code schrijft die alle acties implementeert die u hebt uitgevoerd door besturingselementen uit de werkset te slepen en neer te zetten.

    Voor meer informatie over de Windows Forms Designer in Visual C# 2005 gaat u naar de volgende Msdn-website (Microsoft Developer Network):https://msdn.microsoft.com/en-us/library/ms173077.aspx

  9. Druk op F5 om het project uit te voeren. Wanneer u op Bladeren klikt, wordt het dialoogvenster Openen weergegeven en kunt u naar een Word-document, een Excel-werkblad of een PowerPoint-presentatie bladeren. Selecteer een bestand en klik vervolgens op Openen. Het document wordt geopend in het besturingselement Webbrowser en er wordt een berichtvenster weergegeven met de naam van de Office-documentserver.

Waar u rekening mee moet houden wanneer u het besturingselement Webbrowser gebruikt

Houd rekening met het volgende wanneer u het besturingselement WebBrowser gebruikt:

  • Het besturingselement WebBrowser bladert asynchroon naar documenten. Wanneer u WebBrowser1.Navigate aanroept, retourneert de aanroep het besturingselement naar uw Visual C#-toepassing voordat het document volledig is geladen. Als u van plan bent het ingesloten document te automatiseren, moet u de gebeurtenis NavigateComplete2 gebruiken om een melding te ontvangen wanneer het document is geladen. Gebruik de eigenschap Document van het WebBrowser-object dat wordt doorgegeven om een verwijzing naar het Office-documentobject op te halen, dat in de voorgaande code is ingesteld op oDocument.

  • Het besturingselement WebBrowser biedt geen ondersteuning voor het samenvoegen van menu's.

  • In Internet Explorer versie 5.0 en later kunt u gekoppelde werkbalken weergeven met behulp van de volgende code:

     // This is a toggle option, so call it once to show the 
     // toolbars and once to hide them. This works with Internet Explorer 5
     // but often fails to work properly with earlier versions.
    
    Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
    
  • Er zijn verschillende bekende problemen met het hebben van meerdere webbrowsers in een project en het laden van elk besturingselement met hetzelfde type Office-document (dat wil zeggen alle Word-documenten of alle Excel-werkbladen). Microsoft raadt u aan slechts één besturingselement voor elk project te gebruiken en naar één document tegelijk te bladeren.

    Het meest voorkomende probleem is met Microsoft Office-opdrachtbalken, die als uitgeschakeld worden weergegeven. Als u twee webbrowserbesturingselementen op hetzelfde formulier hebt, die beide zijn geladen met Word-documenten, en als u werkbalken hebt weergegeven met behulp van een van de voorgaande technieken, is slechts één set werkbalken actief en werkt deze correct. De andere is uitgeschakeld en kan niet worden gebruikt.

  • Als u het besturingselement Webbrowser van de huidige inhoud wilt wissen, bladert u in de klik-gebeurtenis van een andere opdrachtknop (of op een andere geschikte plaats in uw code) naar de standaard lege pagina met behulp van de volgende code:

       AxWebBrowser1.Navigate("about:blank");
    

Waar u rekening mee moet houden wanneer u het besturingselement WebBrowser samen met een 2007 Microsoft Office-programma gebruikt

De Office-programma's van 2007 openen office-documenten standaard niet in de webbrowser. Dit gedrag is ook van invloed op het besturingselement WebBrowser. We raden u aan een aangepaste ActiveX-documentcontainer te gebruiken in plaats van het besturingselement Webbrowser wanneer u toepassingen ontwikkelt die Office 2007-documenten openen.

Voor bestaande toepassingen waarvoor achterwaartse compatibiliteit met het besturingselement WebBrowser is vereist, kunt u het register wijzigen om Internet Explorer te configureren. U kunt deze methode gebruiken om Internet Explorer te configureren voor het openen van 2007 Office-documenten in de webbrowser. Klik voor meer informatie op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

927009 Er wordt een nieuw venster geopend wanneer u een 2007 Microsoft Office-programmadocument probeert weer te geven in Windows Internet Explorer 7

Opmerking

Als u het register wijzigt met behulp van de methode die wordt vermeld in het Microsoft Knowledge Base-artikel 927009, zijn de wijzigingen van invloed op het webbrowserbeheer dat u in de toepassing gebruikt. De wijzigingen zijn ook van invloed op alle exemplaren van Internet Explorer. Daarnaast werkt deze methode mogelijk niet voor toekomstige versies van de Microsoft Office-suites. Daarom raden we u aan deze methode alleen te gebruiken voor compatibiliteit met een bestaande toepassing.

Verwijzingen

Klik voor meer informatie over het gebruik van het besturingselement Webbrowser op de volgende artikelnummers om de artikelen in de Microsoft Knowledge Base weer te geven:

  • 304562 Visual Studio 2005 en Visual Studio .NET bieden geen OLE-containerbesturing voor Windows Forms

  • 243058 Het besturingselement Webbrowser gebruiken om een Office-document te openen

  • 927009 Er wordt een nieuw venster geopend wanneer u een 2007 Microsoft Office-programmadocument probeert weer te geven in Windows Internet Explorer 7