当用户在文本框中键入时,如何替换文本框中的字符?(在c#中)
本文关键字:文本 替换 字符 用户 何替换 | 更新日期: 2023-09-27 18:25:41
好的,我要做的是一个文本框,根据从列表框中选择的内容,它已经填充了一些文本。
假设文本框如下所示:
blah blah ??? as?f
我需要弄清楚的是,每当用户点击文本框并删除"?"字符时,我想用*替换该字符,然后每当他们试图删除*时,它都会被"?"替换,这样最终结果就会看起来像
blah blah **? as*f
如果他们删除了除一个以外的所有"?"。
无论我在网上搜索了多久,似乎都找不到类似的东西。。我发现的最接近的问题是这个问题-确定何时以及在文本框中添加或删除哪个字符
但这对我想做的事情并没有真正的帮助……如果有人知道从哪里开始找,甚至知道如何做,我会非常高兴的!
提前感谢!
编辑:是的,这是一个Windows窗体应用程序,很抱歉我忘了指定。O.O
您可以处理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.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, "*");
}
}