Редактор HTML в приложении Windows Forms [закрыто]

Мы ищем элемент управления редактором WYSIWYG для нашего приложения Windows (vb.net или c #), чтобы пользователи могли создавать электронные письма в формате HTML (для отправки с использованием объектов SMTP в среде dot net) перед отправкой.

В настоящее время все доступные редакторы, которые мы можем найти, имеют одну из следующих проблем:

  1. Они полагаются на mshtml.dll или элемент управления веб-браузера, который, как доказано для нас, ненадежен, как HTML-код и редактор не синхронизируются в Windows 2000 (IE6).

  2. Они основаны на веб-технологиях, а не на элементах управления Windows.

  3. Они помещают стили в заголовок документа (см. Примечание ниже)

К сожалению, поскольку в этой статье, посвященной электронной почте в формате HTML, описан единственный надежный способ заставить электронные письма в формате HTML работать со стилями, это использовать их встроенными, что в настоящее время кажется неподдерживаемым во многих редакторах.

Кто-нибудь имеет какой-либо опыт в этом или может предложить решение?

12.08.2008 08:20:15
6 ОТВЕТОВ

Мне также был нужен редактор WYSIWYG для проекта Windows Forms, над которым я работал. Я писал о предметах, которые нашел здесь . В конце концов я использовал то, что нашел в CodeProject: текстовый редактор на основе Windows Forms с выводом HTML . Это нарушает (а) выше в том, что он использует элемент управления WebBrowser. Тем не менее, я не смог найти ничего хорошего, если бы не сделал этого (если вы не используете WebBrowser каким-либо образом, то вам, в основном, нужно написать собственный HTML-анализатор и обработчик для обработки «Что-вы- Смотрите "часть WYSIWYG). Хорошая вещь об этом элементе управления состоит в том, что источник легко настраивается, так что вы можете убрать и добавить опции форматирования, как вам нужно (и если вы хотите, чтобы все стили были встроенными, вы можете сделать это также).

2
18.10.2019 09:48:48

Я использовал этот , который идет немного ниже, чем WebBrowser, но все еще использует MSHTML, который выдает какой-то уродливый HTML. В моих целях я делаю редактор с несколькими вкладками с режимами редактирования WYSIWYG и HTML (используя ICSharp.TextEditor ) с классом Buffer, который обновляется при изменении вкладок. Как часть этого класса Buffer, я фактически запускаю HTML через HTML Tidy и несколько битов scrub-n-replace, чтобы получить действительный XHTML.

Я предлагаю его только в качестве решения, потому что мне тоже не удалось найти решение, которое каким-то образом не было получено из MSHTML, и в конечном итоге просто продолжило работу над вышеуказанным решением, чтобы продолжать двигаться вперед.

3
12.08.2008 16:53:31

Вместо того, чтобы искать редактор HTML, рассмотрите вариант редактора RichText (который может быть намного легче создать), а затем преобразуйте окончательный текст в документ HTML.

При условии, что вам необходимо использовать минимальный набор функций (жирный шрифт / курсив и т. Д.), Создание редактора RT и преобразование окончательного документа в формат HTML не должно быть трудным.

Если, с другой стороны, вам нужно использовать больше функций (например, таблиц), вам нужно изучить Rich Text Format и реализовать нужные вам функции.

Дополнительные ресурсы:

1
16.07.2010 08:29:20
Это то, что мы в конечном итоге делали, конвертируя используя слова aspose.
John 12.01.2011 09:34:16

Существует этот HTML Edit Control для .NET (раскрытие: я написал его).

Это не зависит от любого веб-браузера; это контроль формы Windows; и он может справиться с style=атрибутом.

Это не совсем то, что вам нужно: поскольку она разработана для WYSIWYM, на панели инструментов нет кнопок для редактирования встроенных стилей (хотя механизм рендеринга будет отображать встроенные стили), панель инструментов позволяет указывать только элементы уровня блока, такие как <p>and <h1>и <ul>and <table>; но если вы хотите, вы можете спросить меня о добавлении функциональности (как описано в разделе « Разработка новой функциональности »).

2
8.09.2010 22:16:58
Или вместо того, чтобы нуждаться во мне для реализации новых функций, вы не могли бы отобразить мою встроенную панель инструментов и внедрить / отобразить свою собственную вместо этого: используйте новую панель инструментов и мой существующий API для редактирования документа, а также мой существующий элемент управления HTML для рендеринга / отображения отредактированный документ в режиме реального времени.
ChrisW 8.09.2010 23:28:02

Это мой первый вклад.

Вы можете использовать RichTextBox. Формат RTF более чем достаточно для создания электронных писем.

Недавно я писал о том, как загрузить и сохранить на жесткий диск содержимое RichTextBox.

Позволяет копировать и вставлять. Он прост в использовании и с помощью нескольких кнопок вы можете создавать свои собственные команды.

With RichTextBox1 
    .SelStart = 0 
    .SelLength = Len (. Text) 
    .SelColor = vbRed
End With

Пример для загрузки и сохранения.

http://danielcatala.wordpress.com/2014/01/30/como-cargar-y-guardar-archivos-richtext-con-wpf/

Private Sub btnCarga(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

    Dim archivoCarga As New StreamReader("prueba.rtf")
    With RichTextBox1
        .Selection.Select(.Document.ContentStart, RichTextBox1.Document.ContentEnd)
        .Selection.Load(archivoCarga.BaseStream, System.Windows.DataFormats.Rtf)
    End With
End Sub

Private Sub btnGuarda(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click

    Dim archivoSalida As New StreamWriter("prueba.rtf")
    Dim bs As Stream = archivoSalida.BaseStream

    With RichTextBox1
        .Selection.Select(RichTextBox1.Document.ContentStart,     RichTextBox1.Document.ContentEnd)
        .Selection.Save(bs, System.Windows.DataFormats.Rtf)
    End With
End Sub
0
16.02.2014 08:53:39

Простейший редактор HTML в Windows Forms может показывать <div contenteditable="true"></div>элемент WebBrowserуправления. Он имеет встроенную поддержку для общих функций редактирования текста HTML, таких как:

  • Ctrl+ Bсделать выделение жирным
  • Ctrl+ Iсделать выделение курсивом
  • Ctrl+ Uсделать выделение подчеркнутым
  • Ctrl+ Aвыделить весь текст
  • Ctrl+ Cскопировать выделение
  • Ctrl+ Xвырезать выделение
  • Ctrl+ Vчтобы вставить выбор
  • Ctrl+ Kвставить ссылку

Однако для лучшего пользовательского опыта вы можете полагаться на DOM documentобъекта WebBrowerи использовать его execCommandметод и легко запускать команды типа Bold, Italic, Underline, InsertOrderedList, InsertUnorderedList, InsertImage, FormatBlock, ForeColor, BackColor, и т.д.

Например, следующая команда вставляет упорядоченный список:

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

Examlpe - редактор Windows Forms 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, достаточно иметь элемент WebBrowserуправления Formи инициализировать редактор следующим образом:

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

Затем вы можете использовать, 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);
            }
        }
    }
}
0
30.11.2019 19:01:35
Это полезный ответ на общий вопрос о редакторе HTML-кода WinForms, хотя в этом конкретном вопросе проблема A отмечена в тексте («Они полагаются на mshtml.dll или элемент управления веб-браузера, который, как мы доказали, ненадежен, как HTML-код и редактор перестают синхронизироваться под Windows 2000 (IE6) "), кажется, исключает использование элемента WebBrowserуправления, как здесь. Кроме того, похоже, что это тот же подход, который описан в (внешнем) ресурсе, связанном в ответе @YaakovEllis .
BACON 30.11.2019 19:24:28
Ответ не претендует на то, чтобы быть инновационным, а также не пытается помочь ФП, поскольку вопрос довольно старый, ФП с меньшей вероятностью ищет новый ответ. Но поскольку этот вопрос является первым результатом поиска при поиске редактора HTML в Windows Forms, и он является основным кандидатом для закрытия похожих вопросов как дубликатов, поэтому я считаю, что ему нужен такой ответ, который стоит сам по себе и имеет минимальный и простой пример. Хотя и не идеально, но достаточно хорошо для будущих читателей. В любом случае, спасибо за комментарий @BACON.
Reza Aghaei 30.11.2019 19:58:57