Announcement

Collapse
No announcement yet.

axWebBrowser Control refreshen/löschen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • axWebBrowser Control refreshen/löschen?

    Ich rufe derzeit immer wieder in einem WIndows form folgendes auf

    <PRE>IHTMLDocument2 doc = axWebBrowser1.Document as IHTMLDocument2;
    doc.write(body);</PRE>

    damit wird aus der datenbank ein htmldokument ins control geladen. das problem ist jetzt, dass das vorherige document immer noch drin ist und das neue nur angehängt wird, da im axWebBrowser1.Document noch entwas drinnen ist.
    Wie kann ich die axWebBrowser Control löschen oder gehts auch über das IHTMLDocument2 Control?

    danke, gerald

  • #2
    Hallo, die folgende Routine weist einem Browser einen Text zu. Ein leerer Text löscht den Inhalt.
    <pre>
    public static void SendStringToBrowser(AxSHDocVw.AxWebBrowser aBrowser, string aString) {

    // Body wird gebraucht
    mshtml.HTMLDocument iDocument = (mshtml.HTMLDocument)aBrowser.Document;
    mshtml.HTMLBody iBody = (mshtml.HTMLBody)iDocument.body;

    // Text zuweisen
    iBody.innerHTML = aString;

    } // SendStringToBrowser()
    </pre>

    <p>
    Die "mshtml.dll"-Bibliothek muss eingebunden werden.

    <p>

    Christop

    Comment


    • #3
      Danke für die schnelle Antwort. Mein Problem ist jetzt nur, dass beim Aufruf der Zeile:

      <PRE>iBody.innerHTML = aString;</PRE>

      Folgende Fehlermeldung nach dem Debuggen kommt:
      An unhandled exception of type 'System.NullReferenceException' occurred in htmlKAT.exe

      Additional information: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

      Hm, und ich kann damit leider nix anfangen.

      Danke, Gerald

      Comment


      • #4
        Hallo,
        <p>
        Diese Methode setzt voraus, dass der Browser mit einem "about:blank"-Dokument geladen wurde (wie bereits in einigen Beiträgen dieses Forums beschrieben. Das Laden des Dokumentes dauert einen Augenblick. Man fragt den Endzustand des Ladevorgangs mit einer while-Schleife ab.<p>
        Ich habe eine Methode gebastelt, die die Schrift- und Farbeinstellungen des übergeordneten Controls übernimmt. Dazu fügt man am besten ein Panel an die entsprechende Stelle auf dem Formular ein und legt die Farb- und Schriftwerte fest.
        <p>
        Anschließend wird eine axBrowser-Komponente auf das Panel gezogen und die Eigenschaft Dock auf "fill" gesetzt. (die browser-Komponente hat sich nicht immer an meine Größen-vorgaben gehalten ... bis auf diese ...)
        <p>
        Im Konstruktor oder in einem OnLoad-Event wird die Methode InitializeBrowser() aufgerufen. Sie bereitet den Browser vor. Mit SendStringToBrowser() kann dann Text geschickt werden.
        <p>
        Die Methode schreibe ich in den nächsten Kommentar.
        <p>
        Noch ein Hinweis, der mir einiges an Kopfzerbrechen bereitete: Wenn man das OnBeforeNavigate-Ereignis auswertet, solle man sicherstellen, dass "about:blank" in jedem Fall durch den Browser behandelt wird (e.Cancel = false) und nicht durch den Eventhandler (e.cancel = true). Es gibt sonst eine unglückliche Endlosschleife bei der Initialisierung des Browsers durch die oben genannten Methode InitializeBrowser().
        <p>
        Gruß, Christop

        Comment


        • #5
          Hier die zuvor beschriebene Methode:
          <p>
          <pre>
          <b>public static void InitializeBrowser(AxSHDocVw.AxWebBrowser aBrowser)</b> {

          // eventuell vorhandene Seite entladen
          object o = System.Reflection.Missing.Value;
          aBrowser.Navigate(null, ref o, ref o, ref o, ref o);

          // warten...
          while(aBrowser.Document != null) {

          System.Windows.Forms.Application.DoEvents();

          }

          // Leere Seite laden
          aBrowser.Navigate("about:blank", ref o, ref o, ref o, ref o);

          // warten...
          while(aBrowser.Document == null) {

          System.Windows.Forms.Application.DoEvents();

          }

          while(((mshtml.HTMLDocument)aBrowser.Document).bod y == null) {

          System.Windows.Forms.Application.DoEvents();

          }

          // Body und Document wird öfter gebraucht
          mshtml.HTMLDocument iDocument = (mshtml.HTMLDocument)aBrowser.Document;
          mshtml.HTMLBody iBody = (mshtml.HTMLBody)iDocument.body;

          // Komponente, von der der Browser seine Einstellungen erbt
          System.Windows.Forms.Control iControl = aBrowser.Parent;

          // Scrollbalken, wenn's sein muss
          iBody.scroll = "auto";

          // Link-Farben laden
          iDocument.linkColor =
          ToHtmlColor(System.Drawing.KnownColor.HotTrack);
          iDocument.alinkColor = ToHtmlColor(System.Drawing.KnownColor.HotTrack);
          iDocument.vlinkColor = ToHtmlColor(System.Drawing.KnownColor.HotTrack);

          // Schriften und Farben laden
          iBody.style.borderStyle = "none";
          iBody.style.backgroundColor = ToHtmlColor(iControl.BackColor);
          iBody.style.color = ToHtmlColor(iControl.ForeColor);
          iBody.style.fontFamily = iControl.Font.FontFamily.Name;
          iBody.style.fontSize = iControl.Font.SizeInPoints.ToString(
          System.Globalization.NumberFormatInfo.InvariantInf o) + "pt";
          iBody.style.textDecorationUnderline = iControl.Font.Underline;
          iBody.style.textDecorationLineThrough = iControl.Font.Strikeout;

          if(iControl.Font.Italic) {

          iBody.style.fontStyle = "italic";

          }
          else {

          iBody.style.fontStyle = "normal";

          }

          if(iControl.Font.Bold) {

          iBody.style.fontWeight = "bold";

          }
          else {

          iBody.style.fontWeight = "normal";

          }

          iBody.style.margin = "0px";

          } // InitializeBrowser()

          </pre>
          <p>
          Die Methode ToHtmlLColor wird benötigt:
          <p>
          <pre>
          <b>public static string ToHtmlColor(System.Drawing.KnownColor aColor)</b> {

          return ToHtmlColor(System.Drawing.Color.FromKnownColor(aC olor));

          } // ToHtmlColor()

          <b>public static string ToHtmlColor(System.Drawing.Color aColor)</b> {

          return "#" +
          string.Format("{0:X}", aColor.ToArgb()).Substring(2);

          } // ToHtmlColor
          </pre&gt

          Comment


          • #6
            Danke Deine Lösung hat mir sehr geholfen.

            lG, Gerald

            Comment

            Working...
            X