Как заменить символы в текстовом поле, когда пользователь печатает в нем?(в c #) - PullRequest
4 голосов
/ 25 февраля 2012

Хорошо, у меня есть текстовое поле, заполненное некоторым текстом в зависимости от того, что было выбрано из списка.

скажем, текстовое поле выглядит следующим образом:

blah blah ??? as?f

что мне нужно выяснить, как это сделать, когда пользователь нажимает на текстовое поле и удаляет "?"Я хотел бы заменить этот символ на *, а затем всякий раз, когда они пытаются удалить *, он будет заменен на «?», так что конечный результат будет выглядеть примерно так:

blah blah **? as*f

, если они удалили все, кроме одного "?".

Независимо от того, как долго я искал в Интернете, мне кажется, что я не могу найти ничего похожего ... Самым близким, что я нашел, является этот вопрос - Определите, когда и какой символ добавляется или удаляется в текстовом поле

Но это не очень помогает для того, что я пытаюсь сделать ... если у кого-то есть хорошая идея о том, где начать искать или даже как это сделать, я был бы очень рад!

спасибо заранее!

РЕДАКТИРОВАТЬ: Да, это для приложения Windows Form, извините, я забыл указать это.Оо

Ответы [ 2 ]

4 голосов
/ 25 февраля 2012

Вы можете обработать событие 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;
}

Вы также можете добавить проверки для клавиш-модификаторов, отрегулировать положение курсора и реализовать пользовательское поведение при выделении текста, если это необходимо.

2 голосов
/ 25 февраля 2012

Сохранение 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, "*");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...