PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : frage zu browsercontrol in c#


anakin87
2009-03-05, 09:04:57
hey leutz,
ich versuch gerade nen offline html-viewer in c# zu basteln und
verwende deswegen das ms-hauseigene browsercontrol das mir einen
mehr oder weiger guten IE ersatz bietet. nun zur frage wenn ich
dem control den hml text zuweise wird er klarerweise auch angezeigt

string text = "<html>blabla</html>";
webBrowser1.DokumentText = text;


wenn ich aber einen anderen text nun zuweisen will dann hab ich nen
white-screen als IE-fenster oder es bleibt der alte thml-text bestehen

webBrowser1.DokumentText = text2; //text2 is auch ein "html-string"
webBrowser1.Refresh(); //hät ich probiert aber die dürfte nur für
//online-funktionen zu verwenden sein


hat wer ne idee, wie ich die 2te seite richtig reinlade?

EDIT: ich hab jetzt gerade gesehen das bei der 2. zuweisung des html-textes
der text aber nicht in webBrowser1.DokumentText drin steht ==> er führt den
2. schreibversuch nicht aus... is das dann gesperrt?
muss man da html als datentyp verwenen?

mfg

Gast
2009-03-05, 12:13:38
... und
verwende deswegen das ms-hauseigene browsercontrol das mir einen
mehr oder weiger guten IE ersatz bietet.
Das ist kein IE-Ersatz das ist der IE ;)

Ansonsten würde ich anders vorgehen:
speicher die htmlTexte lokal auf der Platte und dann:
browser.Navigate( ../* uri der htmlseite */)
und wenn du den text verändern willst kannst du ja direkt auf dem DOM arbeiten; also z.B. (pseudo-code)
var link = new HtmlElement();
link.TagName = "A";
link.SetAttriubte("href", "3dcenter.de");
browser.Document.Body.AddChild(link);

anakin87
2009-03-05, 12:30:13
jep, habs grad bemerkt da geht auch strg+f, das is der IE....
hm die idee is gut nur kann ich das so nicht machen, weil ich die daten aus ner DB bekomme und da sinds als text gespeichert und wie krieg ich das dann in ein HtmlDocument....
sonst wärs ja einfach

sting htmlstring = BekommeStringVonDatenbank();
HtmlDocument htdoc = HierGeschietEinWunderString2HtmlDocument(htmlstring);
webBrowser1.Navigate = htdoc;


mfg

Gnafoo
2009-03-05, 13:39:36
Soweit ich das sehe musst du zuerst das DocumentCompleted-Event abwarten, bevor du einen neuen DocumentText setzt. Die Dokumentation sagt:


When you set this property, the WebBrowser control automatically navigates to the about:blank URL before loading the specified text. This means that the Navigating, Navigated, and DocumentCompleted events occur when you set this property, and the value of the Url property is no longer meaningful.

Note:
This property contains the text of the current document, even if another document has been requested. If you set the value of this property and then immediately retrieve it again, the value retrieved may be different than the value set if the WebBrowser control has not had time to load the new content. You can retrieve the new value in a DocumentCompleted event handler.


Scheinbar bleibt er bei about:blank hängen, wenn man zwischendrin das DocumentCompleted-Event nicht abwartet.

anakin87
2009-03-05, 15:29:59
genau dann bleibt er beim about:blank hängen, aber mittlerweile ist das ja nicht mehr das problem
sondern er übernimmt bei der 2. zuweisung den html-code nicht an...

webBrowser1.DocumentText = htmlstring;

und lässt einfach die alte seite offen
wenn man aber stattdessen das da anwendet:

webBrowser1.Dokument.Body.InnerHtml = htmlstring;

dann übernimmt er es nur zum teil und die anderen frames bleiben vom alten erhalten....
was muss man jetzt machen um eine weitere seite vollständig und ohe reste vom vorgänger
reinladen zu können???? außer das alte browsercontrol zu disposen und ein neues einsetzen ;) weil das wär etwas sinnfrei :D

EDIT: der schreibschutz von webBrowser.DocumentText is nur zustandegekommen weil webBrowser.AllowNavigate = false war setzt man es auf true kann man html in den
DocumentText reinschreiben nun hab ich noch eine Frage: wie kann ich das ding auf offline laufen lassen, weil die eigenschaft webBrowser.IsOffline kann nur gelesen werden, leider
mfg

anakin87
2009-03-10, 10:24:27
sry für doppelpost, aber ich bin gereade bei nocheinem problem.....
wie kann ich das browsercontroll in den offline modus bringen?
google/msdn/und co. waren nicht besonders hilfreich....

folgendes is schreibgeschützt und man kanns nur auslesen

browserControl.isOffline = true;

jetzt is aber der html-viewer etwas inperformant wenn er immer die sachen aus dem netz dazulädt
klar kann man den IE im system auf offline stellen - ist aber garnicht zielführend
wie geht das im programm?
muss ich gar im system/registry und da die einstellung setzten?

mfg

anakin87
2009-03-17, 17:35:07
so jetzt gehts an "frage zu browsercontroll in c# - die 2te^^"
und zwar wie kann man einen text darin suchen - ich mein jetzt nicht strg+f und dann suchtext eingeben.... ( aber so ähnlich ;) )
sondern wie kann ich im programm-ablauf das gesuchte wort ins bild setzen ... ist das überhaupt möglich?

beste grüße