Мне нужно изменить регистр нажатой клавиши при ее вводе.
Само нажатие клавиши легко поймать с помощью OnKeyDown
, но неясно, как найти позицию курсора в тексте, чтобы заменить набранный символ.
Событие OnTextChanged
вызывается слишком поздно, когда текст уже изменен.
Попробуйте событие TextInput
, которое вы можете отменить. Положение курсора TextBox или TextArea можно легко определить с помощью TextBox.Selection
.
Следовательно, именно так работает MaskedTextBox
, что является еще одним вариантом сделать то, что вы ищете, реализуя IMaskedTextProvider
, который переводит текст так, как вы хотите. VariableMaskedTextProvider
помогает с базовой реализацией, которую вы можете настроить в соответствии со своими требованиями:
```С#
класс UpperCaseProvider : VariableMaskedTextProvider
{
public override bool Insert (символ char, ref int position)
{
вернуть base.Insert (char.ToUpper (символ), позиция ссылки);
}
public override bool Replace(char character, ref int position)
{
base.Replace(char.ToUpper(character), ref position);
}
}
Then to use it:
```c#
new MaskedTextBox(new UpperCaseProvider());
Надеюсь это поможет.
Сделаю.
Я не пробовал, потому что в документации сказано, что существуют ограничения на TextInput
в iOS
.
Слей это.
Я пытаюсь использовать это в ComboBox
, но я не могу привести ControlObject
к Eto.Wpf.Forms.Controls.EtoComboBox
(чтобы получить доступ к его TextBox
), что, в любом случае, умоляет вопрос, как это сделать кроссплатформенным образом.
Хм, да, у ComboBox
нет всех текстовых событий/свойств, как у TextBox
. Вероятно, их следует добавить.
Если вы пытаетесь использовать какую-либо форму автозаполнения, мне помогло использование TextBox и отображение формы без полей в правильном положении. Это также дает вам больше гибкости в отображаемых элементах и в том, как они отображаются. Тем не менее, это в конечном итоге немного работы.
Сделаю. Спасибо.
Привет @LaraSQP , я оставляю это открытым, чтобы отслеживать реализацию свойств/событий для ComboBox.
Ты прав. Извини за это.