2012-11-16 10 views
5

Mam datagridview z ciągami HTML. Używając zdarzenia CellDoubleClick, wyświetlam ciąg html w formancie WebBrowser.Edytowanie HTML za pomocą edytora WYSIWYG

W 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); 
    } 
} 

W 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"; 
} 

Stosując powyższy kod, mogę z powodzeniem wyświetlić ciąg HTML w postaci zwykłego tekstu, jednak nie jestem w stanie go zmienić. Alternatywnie, jeśli użyję tego kodu:

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(); 
} 

Będzie to pusty formularz, ale będę mógł do niego napisać.

Mam wrażenie, że ma to związek z range.pasteHTML(webBrowser1.DocumentText); będąc w metodzie Form2_Load, ale nie jestem świadomy żadnej innej metody, która pozwoli mi wyświetlić ciąg znaków HTML z DataGridView podczas otwierania Form2.

Chcę umożliwić użytkownikom edycję ciągów HTML w postaci zwykłego tekstu (po czym zostanie przekonwertowany z powrotem na HTML i wyświetlony w widoku datagrid).

Odpowiedz

1

To możliwe! HTML można edytować za pomocą regulatora domyślny WebBrowser,

  1. Dodaj odwołanie do „Microsoft.mshtml.dll” pliku, dostępnym tutaj.

  2. Zakładając, że WebBrowser nazywa się "przeglądarka" dodaj ten kod w przypadku Form.Load (browser.Document.DomDocument as mshtml.IHTMLDocument2).designMode = "On";

  3. zadzwonić pod następujące funkcje formatowania zaznaczonego tekstu:


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); 

WebBrowser kontrola nie pozwala na edycję i jest zaprojektowana tylko do przeglądania stron internetowych. To faktycznie silnik renderujący Internet Explorer/Trident działający za kulisami, który analizuje kod HTML i wyświetla końcową stronę z obsługą DOM/JS. Żadna popularna przeglądarka nie obsługuje edycji stron HTML, IMO, ani IE.

Powiązane problemy