如何在用户键入文本框时替换文本框中的字符?(用c#表示)

如何在用户键入文本框时替换文本框中的字符?(用c#表示),c#,winforms,visual-studio-2010,textbox,C#,Winforms,Visual Studio 2010,Textbox,好的,我现在看到的是一个文本框,根据从列表框中选择的内容,该文本框中填充了一些文本 假设文本框如下所示: blah blah ??? as?f 我需要弄清楚的是,每当用户点击文本框并删除一个“?”字符时,我想用*替换该字符,然后每当他们试图删除*时,它将被替换为一个“?”,这样最终的结果看起来就像 blah blah **? as*f 如果他们只删除了一个“?” 无论我在网上搜索多久,似乎都找不到类似的东西。。我发现的最接近的问题是这个问题- 但是这对我正在努力做的事情没有真正的帮助。。如果

好的,我现在看到的是一个文本框,根据从列表框中选择的内容,该文本框中填充了一些文本

假设文本框如下所示:

blah blah ??? as?f
我需要弄清楚的是,每当用户点击文本框并删除一个“?”字符时,我想用*替换该字符,然后每当他们试图删除*时,它将被替换为一个“?”,这样最终的结果看起来就像

blah blah **? as*f
如果他们只删除了一个“?”

无论我在网上搜索多久,似乎都找不到类似的东西。。我发现的最接近的问题是这个问题-

但是这对我正在努力做的事情没有真正的帮助。。如果有人有一个好主意,从哪里开始寻找,甚至如何做,我会非常棒

提前谢谢


编辑:是的,这是针对Windows窗体应用程序的,对不起,我忘记指定了。O.O

将文本框中的文本存储在某个字符串中,每次按键(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, "*");
    }
}
//获取所有“?”的索引
list charlist=新列表();
字符串buff=textbox.Text;
for(int c=0;c
您可以处理事件并绕过默认处理。事件处理程序可以如下所示:

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;
}

如果需要,您可能还希望添加对修改器键的检查,调整光标位置,并在选择文本时实现自定义行为

对不起,忘了提那件事了。这几乎行得通。每当我添加代码行“textBox.selectionStart=pos;”将光标放回原处时,它都会删除?很好,并添加*fine,但由于某种原因它会删除一个额外的?。。两个?'s将被删除,一个*将从退格键中出现。。。。但是,按delete键而不是backspace键似乎效果很好,可以在不删除任何额外内容的情况下将光标放回原位。。我甚至在我的按键的每一行上都放了一个断点,它显示“文本”在每一步都是正确的…>是否有另一个处理退格的处理程序?您可以尝试禁用此处理程序中的退格,以查看它是否仍然通过。此外,听TextChanged事件可能有助于调试它。这是我将要使用的方法,尽管我现在无法修复该错误,但我将环顾四周,看看我能找出什么。不过,谢谢你朝着正确的方向努力!