Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将文本添加到文本框并将其视为文本块?_C#_Winforms - Fatal编程技术网

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

C# 如何将文本添加到文本框并将其视为文本块?,c#,winforms,C#,Winforms,我想要一个文本框,它可以添加“文本块”。“文本块”的定义是: 删除文本框中作为块一部分的字符会导致整个块被删除 将文本框中的carot位置设置为块的一部分,从而选择整个块 用户在块中间写入字符的任何尝试都将失败,然后出现相应的消息框 我有一个附加了CellClick事件的DataGridView。我希望当CellClick事件发生时,单元格的内容将被放置在文本框中,并被视为文本块。添加块的位置将位于文本框的carot位置,或者如果文本框未聚焦,则位于文本框的末尾,因此carot不闪烁 我还希

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

  • 删除文本框中作为块一部分的字符会导致整个块被删除
  • 将文本框中的carot位置设置为块的一部分,从而选择整个块
  • 用户在块中间写入字符的任何尝试都将失败,然后出现相应的消息框
我有一个附加了CellClick事件的DataGridView。我希望当CellClick事件发生时,单元格的内容将被放置在文本框中,并被视为文本块。添加块的位置将位于文本框的carot位置,或者如果文本框未聚焦,则位于文本框的末尾,因此carot不闪烁

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

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

我考虑了一些解决方案,但不知道哪一个是最好的(可能没有): (备注:以下每种解决方案都假设附加了按键事件)

  • 在每个块之前和之后添加隐藏字符(如果可能)以对其进行标记
  • 创建表示所有文本块的对象列表,每个对象包含两个字段:startIndex和endIndex。不太好,因为从文本框中添加或删除字符需要将位于添加/删除字符之后的块的所有索引更新为每个字符+1或-1
  • 创建表示文本框中所有文本的对象列表,每个对象包含两个字段:text、flag。每次手动添加字符或事件添加单词时,都会将对象添加到列表中,并且对象的文本字段设置为添加的字符,如果字符是事件添加的单词,则对象的标志字段设置为true,否则设置为false
  • 将文本框拆分为两个部分,为事件添加的每个文本块在它们之间创建一个小文本框,并对小文本框进行不同的处理。当小文本框中的文本被删除时,整个文本框控件被删除,拆分的文本框被合并。听起来不太好
  • 实现这一点的最佳方式是什么


    谢谢

    我从未见过有这种行为的控件。我不是说没有人写过,只是说不太可能。这意味着你必须建造它

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

    然后,您需要知道如何存储底层文本以进行编辑。您可以从学习标准文本编辑控件常用的一些技术开始。选择一个可以为自定义场景修改的。以下是我脑海中的一些想法:

    祝你好运