免责声明 - 我现在只使用 C# 大约一个星期,所以希望这不是一个 n00b 问题。我确实环顾四周,但找不到有效的解决方案,包括该线程的结果。
我在 Windows 窗体上有一个组合框。组合框的数据是从 Access 数据库中填充的。我设置的相关属性是 - AutoCompleteMode = Append; AutoCompleteSource = ListItems; 下拉样式 = 下拉。用户必须能够输入组合框并自动完成,因此 DropDownList 的 DropDownStyle 将不起作用。我没有使用默认的下拉箭头,而是使用动态 PictureBox 替换它。单击 PictureBox 或触发 Enter 事件会将组合框的 DropDown 属性设置为 true。
就目前而言,用户可以很好地选择项目或输入项目并按回车键或输入项目并离开该字段等......在所有这些不同类型的交互中,我能够确定正确的值在组合框是。我有某些触发器来确保 SelectedValue 和显示的 Text 始终保持同步。
我能够在我能想到的每一种可能的交互下获得正确的值,除了一个。如果用户开始键入字符串(使用 DropDown 属性 = true)并按右箭头键以使字符串自动完成,则组合框中的字符串始终为空字符串。
视觉的:
已选_文字
上述字符串中的粗体文本是组合框中突出显示的文本。如果用户然后点击右箭头键使组合框中的文本看起来像
Selected_Text
(请注意,此时 DropDown 仍然为真) ComboBox.Text 值始终为“”。
这是 ComboBoxes 的 DropDownClosed 事件之一的代码,这是用户按下回车后触发的第一件事。
private void cmbxYear_DropDownClosed(object sender, EventArgs e)
{
try
{
if (!cmbxYear.Text.Equals(cmbxYear.SelectedValue.ToString()))
{
if (!bUpdated & !bErrorFound)
{
validateData(cmbxYear, clrYear, false, imgFilter1, imgNoFilter1);
updateTable();
}
}
imgFilter1.Visible = false;
imgNoFilter1.Visible = true;
}
catch
{
imgNoFilter1.Visible = false;
imgFilter1.Visible = true;
}
}
我还刚刚发现,当 DropDown 属性 = true 并且用户输入了某些内容然后按“Enter”时,ComboBox.Text 始终为空字符串。如果 DropDown 属性 = false,则不是这种情况。发生这种情况时,将返回正确的字符串。
我什至尝试让程序选择组合框中的所有文本;但是,为 SelectionLength 提供一个大于 ComboBox.Text.Length 的值似乎不起作用。我也尝试过引用 SelectedValue;但是,SelectedValue 为空。
出于所有密集目的,应用程序确信组合框中有一个空字符串。
如何检索实际的字符串?
如果这有助于我为以下事件编写代码:Click、DataSourceChanged、DropDown、DropDownClosed、Enter、KeyDown、Leave 和 Validated。