#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, когда вы присваиваете тексту значение, равное нулю. итак, возникла та же проблема.