如何将文本添加到文本框并将其视为文本块?

时间:2012-07-12 16:36:53

标签: c# winforms

我想要一个可以为其添加“文本块”的文本框。 “文本块”的定义是:

  • 删除文本框中的字符,该字符集是块的一部分,导致整个块被删除。
  • 在文本框中的某个位置设置carot位置,该位置是导致要选择整个块的块的一部分。
  • 用户在块中间写入字符的任何尝试都将失败,然后是相应的消息框。

我有一个附加了CellClick事件的DataGridView。我希望当CellClick事件发生时,单元格的内容将被放置在文本框中,并将被视为文本块。如果文本框没有聚焦,那么添加的块的位置将位于文本框的carot位置或文本框的末尾,因此carot不会闪烁。

我还希望文本框可以作为普通文本框使用,这意味着用户可以添加或删除他想要的任何字符/文本,除了必须完全按照上面定义添加/删除的文本块。

也许我需要使用除textbox之外的其他一些GUI控件来完成这个任务,我不知道。

我想过一些解决方案,但我不知道哪个是最好的(可能没有): (备注:以下每个解决方案都假定附加了一个KeyPress事件)

  1. 在每个块之前和之后添加隐藏字符(如果可能)以标记它。
  2. 创建表示所有文本块的对象列表,每个对象包含两个fiel:startIndex,endIndex。不太好,因为在文本框中添加或删除字符需要更新位于添加/删除字符之后的块的所有索引,每个字符为+1或-1。
  3. 创建表示文本框中所有文本的对象列表,每个对象包含两个字段:text,flag。每次手动添加字符或事件添加单词时,对象将添加到列表中,对象的文本字段将设置为添加的字符,如果字符为单词,则对象的标记字段设置为true由事件添加,否则为假。
  4. 将文本框拆分为2个部分,并为事件添加的每个文本块在它们之间创建一个小文本框,并且不同地处理小文本框。删除小文本框中的文本时,将删除整个文本框控件并将已拆分的文本框合并。听起来不是那么好。
  5. 实施此方法的最佳方法是什么?

    谢谢!

1 个答案:

答案 0 :(得分:1)

我从未见过这种行为的控件。我不是说有人没有写过,只是不太可能。这意味着您将不得不构建它。

如果您从未创建自定义控件,请在网络上搜索“创建自定义winforms控件”或类似内容。您首先需要了解基本技术。

然后,您将想知道如何存储基础文本以进行编辑。您可以从学习标准文本编辑控件常用的一些技巧开始。选择一个可以为自定义方案修改的方法。以下是我的一些问题:

Gap Buffer

Rope

Piece Chains

祝你好运!