views:

3851

answers:

3

Anyone know of a good free winforms html editor for .NET. Ideally I would like html and preview modes along with the possibility of exporting to a pdf, word doc or similar.

Although the export I could probably create myself from the html output.

Another nice feature would be a paste from word that removes all the extra tags you usually end up with but again it's a nice to have not a required.

+12  A: 

You can use the WebBrowser control in design mode with a second WebBrowser control set in view mode.

In order to put the WebBrowser control in design mode, you can use the following code.

This code is a super stripped down version of a WYSIWYG editor for one of our software products.

Simply create a new form, drop a WebBrowser control on it, and put this in the form_load

Me.WebBrowser1.Navigate("about:blank")
Application.DoEvents()
Me.WebBrowser1.Document.OpenNew(False).Write("<html><body><div id=""editable"">Edit this text</div></body></html>")

'turns off document body editing
For Each el As HtmlElement In Me.WebBrowser1.Document.All
    el.SetAttribute("unselectable", "on")
    el.SetAttribute("contenteditable", "false")
Next

'turns on editable div editing
With Me.WebBrowser1.Document.Body.All("editable")
    .SetAttribute("width", Me.Width & "px")
    .SetAttribute("height", "100%")
    .SetAttribute("contenteditable", "true")
End With

'turns on edit mode
Me.WebBrowser1.ActiveXInstance.Document.DesignMode = "On"
'stops right click->Browse View
Me.WebBrowser1.IsWebBrowserContextMenuEnabled = False
Tom Anderson
amazing! answers like this are what SO is all about!
amdfan
I have taken that as the basic idea thanks, I am working on extending the functionality more with a toolbar, for fonts, bold, italic...
PeteT
Thanks for the comments, its a great implementation, the only downside is the code cleaning routines needed to get good xhtml out of it.
Tom Anderson
And the other downside is of course you need IE installed on the computer. It would be nice to see a resource that doesn't require IE to do this.
JohnC
Re: and the other downside is of course you need IE installed on the computerI included this approach in a Click Once WinForm app and I also needed to include a 10 MB COM Interop file so .NET could talk to IE.
Velika
Don't forget to turn option explicit off when you run the above code.
Velika
I can't say I ever had the issue of having to include the COM interop file.
Tom Anderson
"WebBrowser1.ActiveXInstance.Document.DesignMode" how this should be rewritten in C#?
Dmitriy Matveev
if using .Net 4.0 make the ActiveXInstance a dynamic.
Tom Anderson
A: 

see http://www.maconstateit.net/tutorials/JSDHTML/JSDHTML12/jsdhtml12-02.htm for an sample HTML edtior that makes use of editing surport in IE.

http://www.mozilla.org/editor/midasdemo/ and http://starkravingfinkle.org/blog/wp-content/uploads/2007/07/contenteditable.htm also works in IE and gives examples of how to do a toolbar, for fonts, bold, italic etc


See these questions for my experience when I tried do so something like this.

I also had lots of other problem, including have to write resize logic in jscript to get the HTML editor to size along with the WinForm form and having to pass the default form/coontrol colours into the HTML editor so that it looked write then users changed colour schemes on Windows.

Therefore if I need to do this again, I would use a 3rd party HTML editor (free or paid for)

Ian Ringrose
+3  A: 

I'm considering using Writer by Lutz Roeder (of Reflector fame). A basic Html editor written completely in C#, provided as-is with source code. Look for it at http://www.lutzroeder.com/dotnet/

Benjamin Wegman