簡體   English   中英

如何將文本添加到文本框並將其視為文本塊?

[英]How to add text to a textbox and treat it as a block of text?

我想要一個可以向其中添加“文本塊”的文本框。 “文本塊”的定義是:

  • 在文本框中刪除一個字符,該字符是塊的一部分,導致整個塊被刪除。
  • 在文本框內將塊的位置設置為塊的一部分,從而選擇整個塊。
  • 用戶在塊中間寫入字符的任何嘗試均將失敗,並帶有相應的消息框。

我有一個附加了CellClick事件的DataGridView。 我希望在發生CellClick事件時,單元格的內容將放置在文本框中,並將其視為文本塊。 如果文本框未對准焦點,則該彈出框的位置將位於文本框的提示位置,或者在文本框的末尾,因此提示不閃爍。

我還希望該文本框可以用作普通文本框,這意味着用戶可以添加或刪除他想要的任何字符/文本,但必須完全按照上面的定義添加/刪除的文本塊除外。

我可能不知道需要使用除文本框以外的其他GUI控件來完成此任務。

我考慮了一些解決方案,但我不知道哪個是最好的(也許沒有一個):( 備注 :以下每個解決方案都假定附加了KeyPress事件)

  1. 在每個塊之前和之后添加隱藏字符(如果可能)以對其進行標記。
  2. 創建代表所有文本塊的對象列表,每個對象包含兩個字段:startIndex,endIndex。 不太好,因為從文本框中添加或刪除字符需要為每個字符將+1或-1更新位於添加/刪除的字符之后的塊的所有索引。
  3. 創建一個對象列表,以表示文本框中的所有文本,每個對象包含兩個字段:text,flag。 每次手動添加字符或事件添加單詞時,都會將對象添加到列表中,並將對象的文本字段設置為添加的字符,如果字符是單詞,則將對象的標志字段設置為true由事件添加,否則為false。
  4. 將文本框分為兩部分,並為該事件添加的每個文本塊在它們之間創建一個小文本框,並區別對待該小文本框。 當刪除小文本框中的文本時,整個文本框控件將被刪除,拆分后的文本框將被合並。 聽起來我不是很好。

實現此目的的最佳方法是什么?

謝謝!

我從未見過這種行為的控件。 我並不是說有人沒有寫過,只是這不太可能。 這意味着您將必須構建它。

如果您從未創建過自定義控件,請在網上搜索“創建自定義winforms控件”或類似內容。 您首先需要了解基本技術。

然后,您將想知道如何存儲基礎文本以進行編輯。 您可以先學習一些標准文本編輯控件常用的技術。 選擇一個可以為您的自定義方案修改的。 這是我的腦海中的一些:

間隙緩沖

件鏈

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM