21

Windows アプリケーション (vb.net または c#) 用の WYSIWYG エディター コントロールを探しています。これにより、ユーザーは送信前に HTML メールを設計できます (ドット ネット フレームワークの SMTP オブジェクトを使用して送信できます)。

現在、私たちが見つけることができるすべての利用可能なエディターには、次のいずれかの問題があります。

  1. それらは mshtml.dll または Web ブラウザ コントロールに依存していますが、Windows 2000 (IE6) では HTML コードとエディタが同期しなくなるため、信頼性が低いことが証明されています。

  2. これらは Web ベースであり、Windows フォーム コントロールではありません

  3. ドキュメントのヘッドにスタイルを配置します (以下の注を参照)。

残念ながら、このHTML 電子メールの記事で説明しているように、スタイルを使用して HTML 電子メールを作成する唯一確実な方法は、スタイルをインラインで使用することですが、これは現在多くのエディターでサポートされていないようです.

誰かがこれについて経験を持っているか、解決策を提案できますか?

4

5 に答える 5

3

私はこれを使用してきました.これはWebBrowserより少し低いですが、まだMSHTMLを使用しているため、醜いHTMLが吐き出されます. 私の目的のために、タブが変更されるたびに更新する Buffer クラスを使用して、WYSIWYG および HTML 編集モード ( ICSharp.TextEditorを使用) でマルチタブ エディターを実行しています。その Buffer クラスの一部として、実際にHTML Tidyといくつかのスクラブ アンド リプレース ビットを介して HTML を実行し、有効な XHTML を取得します。

私も何らかの方法で MSHTML から派生したものではないものを見つけることができず、最終的に上記の解決策を進めて前進し続けたため、それを解決策として提供するだけです。

于 2008-08-12T16:53:31.643 に答える
3

Windows フォームの最も単純な HTML エディターは<div contenteditable="true"></div>WebBrowserコントロールに を表示することです。次のような一般的な HTML テキスト編集機能のサポートが組み込まれています。

  • Ctrl+B選択範囲を太字にする
  • Ctrl+I選択範囲を斜体にする
  • Ctrl+U選択範囲に下線を付ける
  • Ctrl+Aすべてのテキストを選択するには
  • Ctrl+C選択範囲をコピー
  • Ctrl+X選択範囲を切り取る
  • Ctrl+V選択範囲を貼り付ける
  • Ctrl+Kリンクを挿入する

ただし、ユーザー エクスペリエンスを向上させるために、DOM オブジェクトを信頼してそのメソッドdocumentを使用WebBrowerexecCommand、、、、、、、、、、、などのコマンドを簡単にBold実行できます。ItalicUnderlineInsertOrderedListInsertUnorderedListInsertImageFormatBlockForeColorBackColor

たとえば、次のコマンドは順序付きリストを挿入します。

webBrowser1.Document.ExecCommand("InsertOrderedList", false, null);

例 - Windows フォーム HTML エディター

ここでは、C# アプリケーションの例を共有し、HTML エディターを簡単に実装できることを示します。

ここに画像の説明を入力

public class HtmlEditor
{
    WebBrowser webBrowser;
    private dynamic doc;
    private dynamic contentDiv;
    public HtmlEditor(WebBrowser webBrowserControl, string htmlContent)
    {
        webBrowser = webBrowserControl;
        webBrowser.DocumentText = @"<div contenteditable=""true""></div>";
        webBrowser.DocumentCompleted += (s, e) =>
        {
            doc = webBrowser.Document.DomDocument;
            contentDiv = doc.getElementsByTagName("div")[0];
            contentDiv.innerHtml = htmlContent;
        };
    }
    public string HtmlContent => contentDiv.InnerHtml;
    public void Bold() { doc.execCommand("bold", false, null); }
    public void Italic() { doc.execCommand("italic", false, null); }
    public void Underline() { doc.execCommand("underline", false, null); }
    public void OrderedList() { doc.execCommand("insertOrderedList", false, null); }
    public void UnorderedList() { doc.execCommand("insertUnOrderedList", false, null); }
    public void ForeColor(Color color)
    {
        doc.execCommand("foreColor", false, ColorTranslator.ToHtml(color));
    }
    public void BackColor(Color color)
    {
        doc.execCommand("backColor", false, ColorTranslator.ToHtml(color));
    }
    public void InsertImage(Image image)
    {
        var bytes = (byte[])new ImageConverter().ConvertTo(image, typeof(byte[]));
        var src = $"data:image/png;base64,{Convert.ToBase64String(bytes)}";
        doc.execCommand("insertImage", false, src);
    }
    public void Heading(Headings heading)
    {
        doc.execCommand("formatBlock", false, $"<{heading}>");
    }
    public enum Headings { H1, H2, H3, H4, H5, H6 }
}

この HTML Editor クラスを使用するには、 にWebBrowserコントロールをForm用意し、次のようにエディターを初期化するだけで十分です。

HtmlEditor editor;
private void Form1_Load(object sender, EventArgs e)
{
    var html = @"Some html content";
    editor = new HtmlEditor(webBrowser1, html);
}

次に、 a を使用して使用ToolStrip可能なコマンドを表示し、コマンドを実行できます。例えば:

private void OrderedListButton_Click(object sender, EventArgs e)
{
    editor.OrderedList();
}

private void ImageButton_Click(object sender, EventArgs e)
{
    using (var ofd = new OpenFileDialog())
    {
        ofd.Filter = "Image files|*.png;*.jpg;*.gif;*.jpeg;*.bmp";
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            using (var image = Image.FromFile(ofd.FileName))
            {
                editor.InsertImage(image);
            }
        }
    }
}
于 2019-11-30T18:55:12.057 に答える
2

また、私が取り組んでいた Windows フォーム プロジェクト用の WYSIWYG エディターも必要でした。ここで見つけたアイテムについて書きました。最終的に、CodeProject で見つけたものを使用することになりました: A Windows Forms based text editor with HTML output。これは、WebBrowser コントロールを使用するという点で、上記の (a) に違反しています。ただし、これを行わない優れたものは見つかりませんでした (何らかの方法で WebBrowser を使用しない場合、「What-You- WYSIWYG の "部分を参照してください)。このコントロールの良いところは、ソースを簡単にカスタマイズできるため、必要に応じて書式設定オプションを削除して追加できることです (スタイルをすべてインラインにしたい場合は、これも可能です)。

于 2008-08-12T08:42:03.600 に答える
1

HTMLエディターを検索する代わりに、リッチテキストエディター(作成がはるかに簡単な場合があります)のオプションを検討してから、最終的なテキストをHTMLドキュメントに変換します。

最小限の機能セット(太字/斜体など)を使用する必要がある場合は、RTエディターの作成と最終的なドキュメントのHTML形式への変換の両方が難しくありません。

一方、より多くの機能(テーブルなど)を使用する必要がある場合は、リッチテキスト形式を調べて、必要な機能を実装する必要があります。

追加のリソース:

于 2010-07-16T08:29:20.917 に答える