5

HTML 文字列を含む datagridview があります。CellDoubleClick イベントを使用して、HTML 文字列を WebBrowser コントロールに表示しています。

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

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

上記のコードを使用すると、HTML 文字列をプレーンテキストとして正常に表示できますが、編集することはできません。または、このコードを使用する場合:

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

空白のフォームになりますが、書き込めるようになります。

range.pasteHTML(webBrowser1.DocumentText);Form2_Load メソッドに関係していると感じていますが、Form2 を開いたときに DataGridView から HTML 文字列を表示できる他の方法を知りません。

ユーザーが HTML 文字列をプレーンテキストとして編集できるようにしたいと考えています (その後、HTML に変換されて datagridview に表示されます)。

4

1 に答える 1

1

それが可能だ!WebBrowserデフォルトのコントロールを使用してHTMLを編集できます。

  1. ここから入手できる「Microsoft.mshtml.dll」ファイルへの参照を追加します。

  2. WebBrowserの名前が「browser」であると仮定して、このコードをForm.Loadイベントに追加します (browser.Document.DomDocument as mshtml.IHTMLDocument2).designMode = "On";

  3. 次の関数を呼び出して、選択したテキストをフォーマットします。


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コントロールは編集を許可せず、Webページのみを表示するように設計されています。実際には、HTMLを解析し、DOM/JSサポートを備えた最終ページをレンダリングする舞台裏で動作するInternetExplorer/Tridentレンダリングエンジンです。HTMLページやIMOの編集をサポートする一般的なブラウザはなく、IEもサポートしていません。

于 2013-03-10T07:48:29.983 に答える