Список ответов в форме win - PullRequest
1 голос
/ 19 мая 2010

В моем приложении на C # я получаю xml с сервера, который содержит некоторые ответы, как в ветке форума (с такими элементами, как автор, время, тело, заголовок и т. Д.).

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

Самый простой способ, который мне пришёл в голову, чтобы отобразить ответы, - это поместить элемент управления веб-браузера в форму, сгенерировать полную HTML-страницу в строке из xml и добавить ее в этот элемент управления веб-браузера. И под ним я могу поставить текстовое поле с кнопкой добавления ответа. Все в порядке, за исключением того, что я понятия не имею, как я мог бы реализовать функцию редактирования в моих собственных ответах (я имею в виду, что я мог бы добавить ссылку там ... но ссылку на что)

Я хотел бы знать, есть ли способ получить это событие редактирования из элемента управления веб-браузера (я полагаю, я не могу) или другую (возможно, простую / легкую) идею отображения ответов в виде winform с использованием других управления

1 Ответ

2 голосов
/ 19 мая 2010

Да, это возможно, вы хотите включить «режим дизайна» для документа. Добавьте ссылку на Microsoft.mshtml. Запустите новый проект Windows Forms и поместите WB и кнопку на форму. Сделайте код похожим на это:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        webBrowser1.DocumentText = "<html><body><textarea rows='15' cols='92' name='post-text' id='wmd-input'></textarea></body></html>";
        webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
        button1.Click += button1_Click;
    }

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
        mshtml.IHTMLDocument2 doc = webBrowser1.ActiveXInstance as mshtml.IHTMLDocument2;
        doc.designMode = "On";
    }

    private void button1_Click(object sender, EventArgs e) {
        var html = webBrowser1.Document.Body.All["post-text"].InnerHtml;
        // do something with that
        //...
    }
}
...