我使用 DropDownStyle
设置为 DropDown
的 ComboBox,这意味着我可以独立于 ComboBox 的列表数据源插入任何文本。
我将数据源设置为:
comboBox.DataSource = new List<string> {"", "oe"};
如果我用连字设置文本:
comboBox.Text = "œ";
它立即更改为 oe
形式。
当数据源中不存在连字的规范化条目时,通常会设置文本。
如何强制不规范化这段文字?
最佳答案
您可以使用 SelectedText属性而不是 Text 属性:
comboBox.Focus();
comboBox.SelectedText = "œ";
设置 SelectedText
值意味着向 ComboBox 的编辑控件发送 (SendMessage
) EM_REPLACESEL
消息。这只是替换了 Edit 控件中的文本:该控件不会尝试将输入的文本与列表中的元素相匹配。
您还可以重置 Text 属性,设置:
comboBox.Text = string.Empty;
comboBox.SelectedText = "œ";
在这种情况下,设置 ComboBox.Text
属性会引发 TextChanged
事件 3 次,当有先前的选择时,同时设置焦点(选择现有文本,如果有的话)并替换选择,仅在文本实际更改时引发事件一次。这可能是一个相关的差异。
设置 Text 属性,意味着调用 SetWindowText , 它发送一个 WM_SETTEXT
消息。这将触发模式匹配功能,这也将导致在 Unicode Standard 12.1.0 Case Folding Properties 之后,大小写匹配过程中的字符规范化:
The data supports both implementations that require simple case foldings (where string lengths don't change), and implementations that allow full case folding (where string lengths may grow). Note that where they can be supported, the full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
关于c# - 将连字字符放入 ComboBox 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56474900/