2012-02-25 60 views
4

好的,我所做的是一個文本框,根據從列表框中選擇的內容填充了一些文本。如何在用戶輸入文本框中替換文本框中的字符? (在C#中)

說,文本框看起來像這樣:「?」

blah blah ??? as?f 

什麼,我需要弄清楚如何做的是,只要在文本框中用戶點擊並刪除字符,我想用*替換該字符,然後每當他們嘗試刪除*時,它將被替換爲「?」 ,從而使最終的結果將類似於

blah blah **? as*f 

如果他們刪除所有,但一個「?」。

不管我似乎已經在網上搜索了多久我無法找到類似的話。我已經找到了最接近的就是這個問題 - Determine when and which character is added or deleted in a Text Box

但是,這並不真正幫助了什麼,我試圖做的..如果任何人有從哪裏開始尋找甚至如何去做的好主意,我會非常棒!

在此先感謝!

編輯:是的,這是一個Windows窗體應用程序,對不起,我忘了指定。 O.o

+0

這是WinForms? – 2012-02-25 07:29:42

+0

雅對不起,忘了提。 – 2012-02-25 07:34:25

回答

4

您可以處理KeyDown事件並繞過默認處理。該事件處理程序如下所示:

public void OnKeyDown(Object sender, KeyEventArgs e) 
{ 
    char[] text = textBox.Text.ToCharArray(); 
    int pos = textBox.SelectionStart; 

    switch (e.KeyCode) 
    { 
     case Keys.Back: if (pos == 0) return; pos --; break; 
     case Keys.Delete: if (pos == text.Length) return; break; 
     default: return; 
    } 

    switch (text[pos]) 
    { 
     case '?': text[pos] = '*'; break; 
     case '*': text[pos] = '?'; break; 
     default: return; 
    } 
    textBox.Text = new String(text); 
    e.Handled = true; 
} 

您可能還需要增加檢查修改鍵,調整光標位置,並且在選擇的文本,如果需要實現自定義的行爲。

+0

這幾乎可行。每當我添加一行代碼「textBox.selectionStart = pos;」把光標放回原來的位置,它會刪除?罰款,並添加*罰款,但它會出於某種原因刪除一個額外的?..兩個?將被刪除,一個*將出現從一個退格按....但按刪除而不是退格似乎只是工作罰款,把光標放回它應該在哪裏,沒有刪除任何額外的..我已經把我的keydown的每一行甚至斷點,它顯示「文本」在每一步都是正確的...>< – 2012-02-25 17:19:44

+0

是否有另一個處理退格的處理程序?您可以嘗試在此處理程序中禁用退格以查看它是否仍然通過。另外,聽TextChanged事件可能有助於調試它。 – 2012-02-25 21:26:09

+0

這是即將使用的方法,即使我現在無法修復該錯誤,我會環顧四周,看看我能弄清楚。感謝您在正確的方向推動! – 2012-02-26 00:40:39

2

將textbox.Text存儲在某個字符串中,在每次按鍵(textbox.KeyPress)後通過比較保存的字符串與文本框內的文本,找出'?'被刪除,如果它是在正確的地方插入'*'到文本框中。

//get indexes of all '?' 
list<int> charlist = new list<int>(); 
string buff = textbox.Text; 
for(int c = 0; c< buff.length, c++) 
{ 
    if (buff[c] == '?') 
    { 
     charlist.add(c) 
    } 
} 
//inside keypress event 
foreach(int c in charlist) 
{ 
    if (textbox.Text[c] != '?') 
    { 
     textbox.Text = textbox.Text.Insert(c, "*"); 
    } 
} 
相關問題