Событие Textbox_KeyPress с использованием vb.net или c#

#c# #vb.net #winforms

#c# #vb.net #winforms

Вопрос:

Мое требование заключается в том, что я пытаюсь разработать текстовый редактор для моего родного языка. То есть я пытаюсь разработать текстовый редактор тамильского языка с использованием символов Юникода. Когда я нажимаю клавишу на клавиатуре (например, английский символ), в это время я хочу заменить два символа, таких как «amp; H0b95» «amp;H0bcd». Как мне реализовать эту концепцию? возможно это или нет.
пример кода при событии нажатия клавиши

  e.keychar=chrw("amp;H0b95") amp; chrw("amp;H0bcd") 'This code is not Execute Becuase it get Only One Character'

 TextBox1.Text=chrw("amp;H0b95") amp; chrw("amp;H0bcd")
  

Я уже заканчиваю эту концепцию, но единственная проблема заключается в том, что положение курсора — это прокрутка, то есть, когда я присваиваю символ текстовому полю, время начала выбора равно нулю, поэтому курсор переходит в первую позицию. после второй строки я устанавливаю положение курсора на длину текста, при которой курсор доходит до конца текста.

итак, проблема в том, что курсор перемещается вверх и вниз, когда я постоянно нажимаю клавишу. как решить эту проблему. может ли какой-либо орган подсказать мне идею.

Нажмите здесь! Чтобы увидеть таблицу символов тамильского Юникода.

Комментарии:

1. Какой пользовательский интерфейс вы используете? WinForms из WPF?

Ответ №1:

Вам нужно остановить отображение текстового поля, пока вы обновляете положение курсора. Я уже делал нечто подобное раньше с консольным приложением. Но не могу найти код, чтобы ссылаться на него здесь.

Ответ №2:

Вам необходимо обновить свойство SelectionStart и увеличить его длину в соответствии с размером вставляемого нового текста. Что-то вроде:

 int curPos = txtEditor.SelectionStart;
if (e.KeyChar == 'k')
{
    txtEditor.Text=txtEditor.Text.Insert(txtEditor.SelectionStart, "jj");
    txtEditor.SelectionLength = 0;
}
txtEditor.SelectionStart = curPos   2; //or whatever the length of text u inserted    
  

Ответ №3:

это текстовое поле добавляет «jj», когда пользователь нажимает клавишу k. Положение курсора исправлено.

 public class MyTextBox : TextBox
{

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.K)
        {
            int pos = this.SelectionStart;
            this.Text = this.Text.Substring(0, this.SelectionStart)   "jj" 
              this.Text.Substring(this.SelectionStart);
            this.SelectionStart = pos   2;
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}
  

Комментарии:

1. В вашем кодировании также возникает та же проблема, что при повторном нажатии k в это время selectionstart = 2, когда вы присваиваете тексту значение, равное нулю. итак, возникла та же проблема.