С# Редактор WYSIWYG с использованием веб-браузера и RichTextBox

Я пытаюсь объединить WYSIWYG-редактирование в С#, следуя некоторым примерам отсюда и из других мест.

Я использую веб-браузер для состояния дизайна редактора, но мне нужно иметь возможность переключаться на «html-просмотр», поэтому я использовал расширенное текстовое поле, и моя задача состояла в том, чтобы просто взять содержимое из веб-браузера и установить его в РТБ и наоборот.

Он работает нормально, пока я не попытаюсь вернуть значение из rtb в веб-браузер, затем я получаю предупреждение «Этот документ был изменен, вы хотите сохранить изменения», и после этого веб-браузер не будет принимать новый контент.

Любая идея, что делать? Или любой другой способ справиться с решением после него?

код:

namespace EmailAdmin
{
    public partial class Form1 : Form
    {

    // global variables
    private IHTMLDocument2 doc;
    private int WYSIWYGviewState = 0;

    public Form1()
    {
        InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // initiate web browser to design mode
        webBrowserWYSIWYG.DocumentText = "<html><body></body></html>";
        doc = webBrowserWYSIWYG.Document.DomDocument as IHTMLDocument2;
        doc.designMode = "On";            
    }

    private void linkSwitchWYSIWYGview_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        // determins viewstate
        // is design view
        if (WYSIWYGviewState == 0)
        {
            // set html view
            WYSIWYGviewState = 1;
            rtbWYSIWYG.Visible = true;

            // populates the texteditor with html
            rtbWYSIWYG.Text = webBrowserWYSIWYG.DocumentText;

            // change label text
            linkSwitchWYSIWYGview.Text = "View Design";


        }
        // is html view
        else if (WYSIWYGviewState == 1)
        {
            // set design view
            WYSIWYGviewState = 0;
            rtbWYSIWYG.Visible = false;

            // populates the designer with html
            webBrowserWYSIWYG.DocumentText = rtbWYSIWYG.Text;

            // change label text
            linkSwitchWYSIWYGview.Text = "View HTML";
        }
    }
}
}

person Andreas    schedule 02.07.2009    source источник


Ответы (1)


Это хорошо для вас, что я недавно потратил слишком много времени на изучение того, как работает элемент управления WebBrowser и связанные с ним вещи :-)

Делать то, что вы хотите, а не

webBrowserWYSIWYG.DocumentText = rtbWYSIWYG.Text;

do

webBrowserWYSIWYG.Document.Write(rtbWYSIWYG.Text);

Надеюсь, это поможет. Меня устраивает.

Изменить. Попробуйте следующее:

webBrowserWYSIWYG.Document.OpenNew(true);
webBrowserWYSIWYG.Document.Write(rtbWYSIWYG.Text);
person David Johnstone    schedule 02.07.2009
comment
@David Johnstone: Спасибо, сработало! Все еще есть проблема с этим .Document.Write(); только добавляет, а не заменяет, так что если вы начнете с написания! и переключаться между представлениями, документ будет увеличиваться на 1 ! каждый переключатель. Есть предположения? - person Andreas; 02.07.2009
comment
Я решил это и собирался написать о: webBrowserWYSIWYG.Document.OpenNew(true); когда я увидел, что вы обновили ответ, еще раз спасибо, Дэвид - person Andreas; 02.07.2009