【问题标题】:How to replace characters in a text box as a user is typing in it? (in c#)当用户输入文本框时,如何替换文本框中的字符? (在 C# 中)
【发布时间】:2012-02-25 16:14:08
【问题描述】:

好的,我正在做的是一个文本框,其中填充了一些文本,具体取决于从列表框中选择的内容。

说文本框看起来像这样:

blah blah ??? as?f

我需要弄清楚如何做的是每当用户点击文本框并删除“?”字符,我想用 * 替换该字符,然后每当他们尝试删除 * 时,它将被替换为“?” ,所以最终结果看起来像

blah blah **? as*f

如果他们只删除了一个“?”。

无论我在网上搜索了多长时间,我似乎都找不到类似的东西。我找到的最接近的是这个问题 - Determine when and which character is added or deleted in a Text Box

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

提前致谢!

编辑:是的,这是针对 Windows 窗体应用程序的,抱歉,我忘记指定了。哎哟

【问题讨论】:

  • 对不起,忘了说。

标签: c# winforms visual-studio-2010 textbox


【解决方案1】:

您可以处理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;
}

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

【讨论】:

  • 这几乎可以工作。每当我添加代码行“textBox.selectionStart = pos;”将光标放回原来的位置,它将删除?很好,然后添加 * 很好,但由于某种原因,它会删除一个额外的 ?.. 两个 ? 将被删除,一个 * 将出现在一次退格键中......但是按删除而不是退格键似乎可以正常工作很好,并将光标放回它应该在的位置而不删除任何额外的东西。我甚至在我的 keydown 的每一行都放了一个断点,它在每一步都显示“文本”是正确的......>
  • 是否有另一个处理退格的处理程序?您可以尝试在此处理程序中禁用退格键以查看它是否仍然通过。此外,监听 TextChanged 事件可能有助于调试它。
  • 这是我要使用的方法,即使我现在无法修复该错误,但我会环顾四周,看看我能弄清楚什么。感谢您朝着正确的方向前进!
【解决方案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, "*");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多