2017-10-10 2 views
0

Ich habe eine HTML-Seite in der Webbrowser-Steuerelement geladen. Das HTML hat eine JavaScript-Funktion windows.print, die versucht, von meinem Browser zu drucken. Wie kann ich die windows.print() -Funktion übergeben, um über Winforms C# zu drucken. Oder wie kann ich das JavaScript-Objekt, das gedruckt werden soll, an die zu druckende C# übergeben?C# Winforms Webbrowser-Steuerelement mit Javascript

Bitte ich bin ein Anfänger mit C#, würde mich über eine detaillierte Erklärung freuen. Vielen Dank!

Antwort

0

Sie wahrscheinlich so etwas wie dieser

namespace WindowsFormsApplication 
{ 
    // This first namespace is required for the ComVisible attribute used on the ScriptManager class. 
    using System.Runtime.InteropServices; 
    using System.Windows.Forms; 

    // This is your form. 
    public partial class Form1 : Form 
    { 
     // This nested class must be ComVisible for the JavaScript to be able to call it. 
     [ComVisible(true)] 
     public class ScriptManager 
     { 
      // Variable to store the form of type Form1. 
      private Form1 mForm; 

      // Constructor. 
      public ScriptManager(Form1 form) 
      { 
       // Save the form so it can be referenced later. 
       mForm = form; 
      } 

      // This method can be called from JavaScript. 
      public void MethodToCallFromScript() 
      { 
       // Call a method on the form. 
       mForm.DoSomething(); 
      } 

      // This method can also be called from JavaScript. 
      public void AnotherMethod(string message) 
      { 
       MessageBox.Show(message); 
      } 
     } 

     // This method will be called by the other method (MethodToCallFromScript) that gets called by JavaScript. 
     public void DoSomething() 
     { 
      // Indicate success. 
      MessageBox.Show("It worked!"); 
     } 

     // Constructor. 
     public Form1() 
     { 
      // Boilerplate code. 
      InitializeComponent(); 

      // Set the WebBrowser to use an instance of the ScriptManager to handle method calls to C#. 
      webBrowser1.ObjectForScripting = new ScriptManager(this); 

      // Create the webpage. 
      webBrowser1.DocumentText = @"<html> 
       <head> 
        <title>Test</title> 
       </head> 
       <body> 
       <input type=""button"" value=""Go!"" onclick=""window.external.MethodToCallFromScript();"" /> 
        <br /> 
        <input type=""button"" value=""Go Again!"" onclick=""window.external.AnotherMethod('Hello');"" /> 
       </body> 
       </html>"; 
     } 
    } 
} 
+0

Dank so viel tun können, arbeitete das. Jetzt versuche ich einen Parameter zur Methode MethodCallFromScript hinzuzufügen, aber es wirft einen Fehler auf. dass es nur ein Argument braucht. –

+0

Sie können immer eine Methode definieren, um mehr als einen Parameter in Ihrer ScriptManager-Klasse zu verwenden, eine Methodensignatur definieren, die zu Ihrem js-Funktionsaufruf passt, und diese aufrufen. – Charles

+0

Bitte geben Sie ein Beispiel, wie Sie das mit dem obigen Code erreichen können? –