如何扩展TextBox'的属性来创建一个RichTextBox

本文关键字:属性 创建 RichTextBox 一个 何扩展 扩展 TextBox | 更新日期: 2023-09-27 17:51:21

我的问题是如何扩展一个文本框,这样它可能会开始像RichTextBox的行为?RichTextBox可以添加各种属性:主要是外观。我应该使用这种方法,我扩展TextBox类,并创建一个基本的TextBox,它将包含几个其他文本框,这将表现得像一个大的容器节点包含小型专用节点?

对于初学者来说,要在"+"之后使用可替换颜色的文本,我这样使用:

class CustomTextBox : TextBox
{
 List<TextBox> _textboxes = new List<TextBox>();
 string _Text="";
 List<Color> colorlist = new List<Color>();
 public override string Text
 {
   get{return this._Text;}
   set{this._Text = value;}
 }
 public CustomTextBox()
 {
   foreach(Color color in (Color[]) Enum.GetValues(typeOf(Color)))
   {
     colorlist.add(color);
   }
   this.KeyUp+= new KeyUpEventHandler(TextChangedCheck);
 }
 int i=0;
 private void TextChangedCheck(object sender, KeyUpEventArgs e)
 {
   if(e.KeyData == Keys.Add)
   {
     TextBox Temp = new TextBox();
     Temp.Text = this.Text;
     this.Text = "";
     Temp.ForeColor = colorlist[i];
     i++;
     this._textboxes.Add(Temp);
     this.Controls.Add(_textboxes[i]);
     e.Handled = true;
   }
 }
}

编辑:

这个问题的主要目的是使用自己的属性来扩展文本框,使其具有类似RTB的行为,而不使用图形或相关的

如何扩展TextBox'的属性来创建一个RichTextBox

我不得不猜测你在这里真正想要实现什么。

但是如果你想要一个带有格式化文本(FT)的控件,并且真的真的真的不想要一个RichTextBox,我认为你不应该为每一块FT创建一个新的嵌入式TextBox。

相反,你应该自己写FT,也许在一个面板上与DrawString和使用只有一个文本框的文本输入。一旦你接受了挑战,这真是一个有趣的项目。当然,你必须仔细考虑你的格式,还要考虑各种各样的接口问题。

上周,我通过使用ListView避免了一个小型帮助系统的RTF;它只按行进行格式化,使用第一个字符从一打左右的列表中表示格式。