2012-02-25 65 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, "*"); 
    } 
} 
相关问题