Поместите лигатурный символ в текст ComboBox - PullRequest
4 голосов
/ 06 июня 2019

Я использую ComboBox с DropDownStyle, установленным на DropDown, что означает, что я могу вставить любой текст, независимо от списка источников данных ComboBox.

Я установил Источник данных на:

comboBox.DataSource = new List<string> {"", "oe"};

Если установить текст с лигатурой:

comboBox.Text = "œ";

немедленно заменяется формой oe.

Текст обычно устанавливается, когда запись нормализации лигатуры не существует в источнике данных.

Как заставить не нормализовать этот текст?

1 Ответ

1 голос
/ 07 июня 2019

Вы можете использовать свойство SelectedText вместо свойства Text:

comboBox.Focus();
comboBox.SelectedText = "œ";

Установка значения SelectedText подразумевает отправку (SendMessage) сообщения EM_REPLACESEL в элемент управления Edit ComboBox. Это просто заменяет текст в элементе управления Edit: элемент управления не пытается сопоставить текст, введенный с элементами в списке.

Вы также можете сбросить свойство Text, установив:

comboBox.Text = string.Empty;
comboBox.SelectedText = "œ";

В этом случае установка свойства ComboBox.Text вызывает событие TextChanged 3 раза, когда есть предыдущий выбор, при настройке Фокуса (выбор текста на выходе, если таковой имеется) и замене выбора вызывается только событие один раз и только если текст действительно изменяется. Это может быть существенной разницей.

Установка свойства Text подразумевает вызов SetWindowText , который отправляет сообщение WM_SETTEXT. Это вызовет функцию сопоставления с образцом, которая также будет вызывать, в соответствии с Unicode Standard 12.1.0 Свойства сворачивания регистра , нормализацию символов в процедуре сопоставления регистра:

Данные поддерживают обе реализации, которые требуют простого случая складывания (где длины строк не меняются) и реализации, которые разрешить полное сворачивание кейса (где длина строк может возрасти). Обратите внимание, что там, где они могут поддерживаться, полные сгибы дела превосходят: для Например, они позволяют "MASSE" и "Maße" совпадать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...