c# - 将连字字符放入 ComboBox 文本

标签 c# winforms combobox

我使用 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/

相关文章:

c# - 使用 radioButton CheckedChanged 事件停止对函数的双重调用?

c# - 将滚动条添加到 WinForms ComboBox

c# - 如何动态构建 Linq 查询

c# - 为 Selenium WebDriver 查找元素

javascript - ASP.NET Core 失败的 AJAX Post 请求

c++ - visual studio 2015 clr form deigner 无法从文件加载 ui

.net - 如何在 RichTextBox 中创建上下文菜单

Python:gtk.ComboBox 追加框

C# Combobox 项目文本更改?

c# - C# 获取当前浏览器地址