2012-07-12 113 views
2

我想要一個可以添加「文本塊」的文本框。 「文本塊」的定義是:如何將文本添加到文本框並將其視爲文本塊?

  • 刪除作爲塊的一部分的文本框中的字符,導致整個塊被刪除。
  • 將文本框中的座標位置設置爲塊的一部分,從而導致整個塊被選中。
  • 用戶在塊中間寫入char的任何嘗試都會失敗,然後顯示相應的消息框。

我有一個DataGridView附加CellClick事件。我希望當CellClick事件發生時,單元格的內容將被放置在一個文本框中,並被視爲一個文本塊。如果文本框沒有對焦並且Carot不閃爍,則添加塊的位置將位於文本框的座標位置或文本框的末尾。

我也希望文本框可以作爲一個普通的文本框,這意味着用戶可以添加或刪除他想要的任何字符/文本,除了文本塊,他們必須完全添加/刪除完全如上面定義。

也許我需要使用一些其他的GUI控件,除了文本框來完成這個任務,我不知道。

我想到了一些解決方案,但我不知道這是最好的(也許他們沒有): (句話:每個以下解決方案假定有一個附加KeyPress事件)

  1. 在每個塊的前後添加隱藏字符(如果可能)以標記它。
  2. 創建代表所有文本塊的對象列表,每個對象包含兩個字符:startIndex,endIndex。不太好,因爲從文本框中添加或刪除字符需要將位於添加/刪除字符之後的塊的所有索引更新爲每個字符+1或-1。
  3. 創建表示文本框中所有文本的對象列表,每個對象包含兩個字段:文本,標誌。每次手動添加字符或事件添加一個單詞時,都會將對象添加到列表中,並將對象的文本字段設置爲添加的字符,並且如果字符是單詞,則該對象的標誌字段將設置爲true由事件添加,否則爲false。
  4. 將文本框分割爲2個部分,並在它們之間爲由事件添加的每個文本塊創建一個小文本框,並對不同的小文本框進行處理。當小文本框中的文本被刪除時,整個文本框控件將被刪除,並且拼接文本框被統一。聽起來不那麼好。

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

謝謝!

回答

1

我從來沒有見過這種行爲的控制。我並不是說有人沒有寫過,只是不太可能。這意味着你將不得不建立它。

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

然後你會想知道如何存儲底層文本進行編輯。您可以從學習常用於標準文本編輯控件的一些技巧開始。選擇一個可以爲自定義場景修改的項目。下面是一些我的頭頂部:

Gap Buffer

Rope

Piece Chains

祝你好運!