2012-11-16 12 views
5

Ich habe eine Datagridview mit HTML-Zeichenfolgen. Unter Verwendung eines CellDoubleClick-Ereignisses zeige ich die HTML-Zeichenfolge in einem WebBrowser-Steuerelement an.Bearbeiten von HTML mit einem WYSIWYG-Editor

In Form1

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
    try 
    { 
     if (e.ColumnIndex != 0 && e.RowIndex != -1) 
     { 
      string s = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); 
      this.f2 = new Form2(s); 
      f2.ShowDialog(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

In Form2

private IHTMLDocument2 doc; 
string reply; 

public Form2(string reply) 
{ 
    InitializeComponent(); 
    this.reply = reply; 
} 

private void Form2_Load(object sender, EventArgs e) 
{ 
    webBrowser1.DocumentText = reply; <--- string from DataGridView 

    IHTMLTxtRange range = doc.selection.createRange() as IHTMLTxtRange; 
    range.pasteHTML(webBrowser1.DocumentText); 
    range.collapse(false); 
    range.select(); 

    doc = webBrowser1.Document.DomDocument as IHTMLDocument2; 
    doc.designMode = "On"; 
} 

den obigen Code verwenden, kann ich erfolgreich die HTML-String als Klartext angezeigt werden, aber ich bin nicht in der Lage, es zu bearbeiten. Alternativ, wenn ich diesen Code verwende:

private IHTMLDocument2 doc; 
private void Form2_Load(object sender, EventArgs e) 
{ 
    webBrowser1.DocumentText = reply; <--- string from DataGridView 

    doc = webBrowser1.Document.DomDocument as IHTMLDocument2; 
    doc.designMode = "On"; 

    IHTMLTxtRange range = doc.selection.createRange() as IHTMLTxtRange; 
    range.pasteHTML(webBrowser1.DocumentText); 
    range.collapse(false); 
    range.select(); 
} 

Es wird ein leeres Formular sein, aber ich werde in der Lage sein, daran zu schreiben.

Ich habe das Gefühl, dass es mit range.pasteHTML(webBrowser1.DocumentText); in der Form2_Load -Methode zu tun hat, aber ich kenne keine andere Methode, mit der ich die HTML-Zeichenfolge aus dem DataGridView beim Öffnen von Form2 anzeigen kann.

Ich möchte Benutzern ermöglichen, die HTML-Zeichenfolge als Klartext bearbeiten (nach dem es wieder in HTML konvertiert und in der Datagridview angezeigt wird).

Antwort

1

Es ist möglich! Sie können HTML mit der Standard-WebBrowser Kontrolle bearbeiten,

  1. einen Verweis hinzufügen auf die „Microsoft.mshtml.dll“ Datei finden Sie hier.

  2. Ihren WebBrowser Unter der Annahme, "Browser" genannt, diesen Code im Fall Form.Load hinzufügen (browser.Document.DomDocument as mshtml.IHTMLDocument2).designMode = "On";

  3. Rufen Sie die folgenden Funktionen zum Formatieren des markierten Textes:


browser.document.ExecCommand("Bold", false, null); 
browser.document.ExecCommand("Underline", false, null); 
browser.document.ExecCommand("Italics", false, null); 
browser.document.ExecCommand("StrikeThrough", false, null); 
browser.document.ExecCommand("FontName", false, "Times New Roman"); 
browser.document.ExecCommand("FontName", false, "Arial"); 
browser.document.ExecCommand("FontName", false, "etc."); 
browser.document.ExecCommand("FontSize", false, "1"); 
browser.document.ExecCommand("FontSize", false, "2"); 
browser.document.ExecCommand("FontSize", false, "3"); 
browser.document.ExecCommand("InsertUnorderedList", false, null); 
browser.document.ExecCommand("InsertOrderedList", false, null); 
browser.document.ExecCommand("Cut", false, null); 
browser.document.ExecCommand("Copy", false, null); 
browser.document.ExecCommand("Paste", false, null); 
browser.document.ExecCommand("CreateLink", true, null); 

Die WebBrowser Steuerelement ermöglicht keine Bearbeitung und dient nur zum Anzeigen von Webseiten. Es ist eigentlich die Internet Explorer/Trident-Rendering-Engine, die hinter den Kulissen arbeitet, die den HTML-Code analysiert und die letzte Seite mit DOM/JS-Unterstützung abrundet. Kein populärer Browser unterstützt die Bearbeitung von HTML-Seiten, IMO, und auch IE nicht.

Verwandte Themen