ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – Winforms组合框在lostfocus上丢失自动完成值

2019-06-29 22:55:15  阅读:231  来源: 互联网

标签:c winforms combobox lost-focus


当用户选中下一个控件时,我遇到Winforms组合框丢失自动完成期间找到的值的问题.

这是一个代码示例(作为将弹出表单的Nunit测试):

[Test]
[STAThread]
public void Testing_AsDropDownList()
{
    var comboBox = new ComboBox();
    comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
    comboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
    comboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
    comboBox.Items.Add(new ComboPair("aaa", "ItemAAA"));
    comboBox.Items.Add(new ComboPair("bbb1", "ItemBBB1"));
    comboBox.Items.Add(new ComboPair("bbb2", "ItemBBB2"));
    comboBox.Items.Add(new ComboPair("bbb3", "ItemBBB3"));
    comboBox.Items.Add(new ComboPair("ccc", "ItemCCC"));
    var textBox = new TextBox{ Multiline = true };        
    comboBox.Leave += (sender, args) => textBox.Text = "On Leave: " + comboBox.SelectedItem;
    comboBox.LostFocus += (sender, args) => textBox.Text += " ... On LostFocus: " + comboBox.SelectedItem;
    var frm = new Form();
    frm.Width = 300;
    frm.Height = 100;
    comboBox.Dock = System.Windows.Forms.DockStyle.Top;
    textBox.Dock = System.Windows.Forms.DockStyle.Bottom;
    frm.Controls.Add(comboBox);
    frm.Controls.Add(textBox);
    Application.EnableVisualStyles();
    Application.Run(frm);
}

要重现该错误,请执行以下步骤:

>运行测试
该表单将弹出以组合框为重点…
>现在输入’bbb3’以选择具有自动完成功能的相应项目.
现在,您将看到文本框已更新为“bbb3”作为您选择的项目.
>现在按TAB键

您现在将看到文本框具有焦点,并且组合选择已更改为“bbb1”.
另请注意,在文本框中,它会显示当触发事件被触发时所选值仍然是“bbb3”,但是当失去焦点事件触发时它是“bbb1”.

如果单击远离组合框使其在步骤3中失去焦点,则会出现相同的行为.

如果您在步骤3中执行任何其他操作,则不会出现此问题.即如果你:

>按’输入’
>按“向上”然后“向下”返回“bbb3”
>单击该项目
>等

有任何想法吗?

解决方法:

我从微软找到了这个链接

http://connect.microsoft.com/VisualStudio/feedback/details/711945/tab-on-a-winforms-combobox-with-properties-autocompletemode-append-autocompletesource-listitems-doesnt-work-correctly

基本上这是一个已知的问题,微软表示他们无法修复.但是,该链接的变通方法部分有两种解决方法.

标签:c,winforms,combobox,lost-focus
来源: https://codeday.me/bug/20190629/1330710.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有