如何创建自定义文本编辑控件?

时间:2009-06-12 06:08:46

标签: c#

我需要在C#中创建一个文本编辑控件,我不知道从哪里开始。

对于一些上下文:C#程序将编辑XML文档(使用此控件)。 XML文档可以转换为HTML。

XML文档将包含以下内容:

  • 普通文字(显然)
  • 标题(格式不同)
  • 解释
  • 图片
  • 视频(它们不需要在控件中查看,但需要有一个框或其他东西来表示它们在那里)

我希望这个控件能够获取XML并对其进行渲染,并充当XML的WYSIWYG编辑器。

目前,我不关心实现上述所有细节(尽管最终需要实现),我只是想知道从哪里开始创建这个控件。我应该从TextBoxBase(或TextBox)继承并从那里继续吗?我需要覆盖哪些方法?或者我应该从Control继承(在这种情况下,我认为我需要所有文本框的东西 - 选择文本,复制和粘贴,插入符号等等 - 我自己,这是我不想做的事情,但是如果必须,我准备做。

我知道像[{3}}这样的预先存在的控件可以做我喜欢的事情(尽管这个控件比我需要的强大得多),但是我不能使用这些(这是针对大学项目的)而且,我真的很想知道如何从头开始。

4 个答案:

答案 0 :(得分:2)

#develop的开发人员在他们的“解剖C#应用程序”一书中讨论了创建功能丰富的版本控件的主题,包括语法高亮,代码完成等。

http://www.icsharpcode.net/OpenSource/SD/InsideSharpDevelop.aspx

(我想你不能再买它了,链接说可以免费下载,但链接好像坏了)

这本书基本上解释了#develop(pre V1,因此它有点过时)的核心功能,包括代码编辑器和(在重要的时候)在过程中犯了哪些错误。

答案 1 :(得分:2)

  

我应该从TextBoxBase(或TextBox)继承并从那里继续吗?

您无法从TextBoxBase继承(其构造函数为internal)。

因此,您可以从TextBox或Control或UserControl继承。

TextBox的问题在于它的绘制是由非托管代码完成的,在覆盖OnPaint时不会覆盖它。有关详细信息,请参阅this question, answer and comments

  

我知道像TX Text Control这样的预先存在的控件可以像我想要的那样做什么

TX文本控件是另一回事:它是使用Win32代码实现的,带有.NET包装器/ API。

答案 2 :(得分:1)

几年前,我使用优秀的开源Scintilla编辑器作为从中派生自定义C#控件的基础。工作得很好。如今,如果您利用已经为您完成包装工作的ScintellaNET项目(CodePlex),那就更容易了。当然,如果您不介意付费,Actipro的SyntaxEditor就不会出错。

答案 3 :(得分:0)

继承Control将需要大量工作,例如绘画,实现默认行为等。

我认为您可以从研究RichTextBox控件开始,因为您可以通过更改RichtextBox控件来完成所有要求。