2010-11-29 29 views
2

Je ne peux pas comprendre pourquoi cette simple lignes de code ne fonctionne tout simplement pas:Webbrowser.DocumentStream ou Webbrowser.DocumentText ne fonctionne pas?

// Bulding tree 
var declaration = new XDeclaration("1.0", "UTF-8", "yes"); 
var root = new XElement("root"); 

// Adding elements to document 
var doc = new XDocument(declaration, root); 

// Salve the stream 
var stream = new MemoryStream(); 
doc.Save(stream); 

// Update WebBrowser control 
webBrowser1.DocumentStream = stream; 

Répondre

6

vous enregistrez au flux, en laissant le « curseur » positionné à la fin ... puis donner au navigateur, que je soupçonne lire à partir de l'emplacement actuel. Essayez d'ajouter:

stream.Position = 0; 

juste avant la dernière ligne.

EDIT: D'accord, vous dites que ça ne marche pas ... voici un programme court mais complet qui fonctionne pour moi. Essayez et voir si cela fonctionne pour vous - et si elle le fait, voyez si vous pouvez travailler la différence entre votre code et ceci:

using System; 
using System.Drawing; 
using System.IO; 
using System.Text; 
using System.Windows.Forms; 

class Test 
{ 
    [STAThread] 
    static void Main() 
    { 
     Form form = new Form(); 
     WebBrowser browser = new WebBrowser(); 
     browser.Dock = DockStyle.Fill; 
     form.Controls.Add(browser); 
     form.Load += delegate { SetDocumentStream(browser); }; 

     Application.Run(form); 
    } 

    static void SetDocumentStream(WebBrowser browser) 
    { 
     string text = "<html><head><title>Stuff</title></head>" + 
      "<body><h1>Hello</h1></body></html>"; 
     byte[] bytes = Encoding.UTF8.GetBytes(text); 
     MemoryStream ms = new MemoryStream(); 
     ms.Write(bytes, 0, bytes.Length); 
     ms.Position = 0; 
     browser.DocumentStream = ms; 
    } 
} 
+0

Ne fonctionne toujours pas! – gremo

+0

@Gremo: Voir mes modifications. –

+0

Ok !!! Travailler maintenant ... le seul problème que j'ai à résoudre est que le contrôle webbroser est vide lors de la définition de sa propriété de source de données à un flux de mémoire xml. Le flux contient en fait des données (je peux lire xml par un clic droit -> afficher la source dans le contrôle webbrowser). Peut-être que je dois mettre tag, mais je cherchais une meilleure solution ... – gremo

2

C'est vieux, mais .... je luttais pour ce un certain temps aujourd'hui et cela n'a pas fonctionné jusqu'à ce que j'isolé cette ligne de code affectant le contrôle du navigateur Web et commenté it out:

AllowNavigation = false; 

... si évidemment cela doit être vrai. vous pouvez avoir tout le reste correct et cela l'empêchera de fonctionner.