gpt4 book ai didi

c# - 如何将文本添加到文本框并将其视为文本 block ?

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:20 25 4
gpt4 key购买 nike

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

  • 删除作为 block 一部分的文本框中的一个字符会导致整个 block 被删除。
  • 将文本框中的 carot 位置设置为 block 的一部分,从而选择整个 block 。
  • 用户在 block 中间写入字符的任何尝试都将失败,随后会出现相应的消息框。

我有一个附加了 CellClick 事件的 DataGridView。我希望当 CellClick 事件发生时,单元格的内容将被放置在一个文本框中,并将被视为一个文本 block 。添加的 block 的位置将在文本框的 carot 位置或文本框的末尾(如果文本框未获得焦点,因此 carot 不闪烁)。

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

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

我考虑了一些解决方案,但我不知道哪个是最好的(也许都不是):(备注:以下每个解决方案都假设有一个 KeyPress 事件被附加)

  1. 在每个 block 前后添加隐藏字符(如果可能)以对其进行标记。
  2. 创建代表所有文本 block 的对象列表,每个对象包含两个字段:startIndex、endIndex。不太好,因为从文本框中添加或删除字符需要将位于添加/删除字符之后的 block 的所有索引更新为每个字符 +1 或 -1。
  3. 创建代表文本框中所有文本的对象列表,每个对象包含两个字段:文本、标志。每次手动添加一个字符或事件添加一个单词时,都会将一个对象添加到列表中,并将对象的文本字段设置为添加的字符,如果字符是单词,则对象的标志字段设置为真由事件添加,否则为 false。
  4. 将文本框分成两部分,并在它们之间为事件添加的每个文本 block 创建一个小文本框,并区别对待小文本框。当小文本框中的文本被删除时,整个文本框控件被删除,拆分的文本框被合并。我听起来不太好。

实现它的最佳方法是什么?

谢谢!

最佳答案

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

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

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

Gap Buffer

Rope

Piece Chains

祝你好运!

关于c# - 如何将文本添加到文本框并将其视为文本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com