好的,我发生的是一个文本框,根据从列表框中选择的内容填充了一些文本。
说文本框看起来像这样:
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 :(得分: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;
}
如果需要,您可能还需要添加对修改键的检查,调整光标位置以及在选择文本时实现自定义行为。
答案 1 :(得分: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, "*");
}
}