ComboBox的Editbox部分会自动选中

15 .net c# combobox winforms

我有一个小问题,一直困扰我几个小时.

在我的WinForms(.NET 3.5)应用程序中,我在运行时在TableLayoutPanel中创建一些ComboBoxes(DropDownStyle = DropDown)并用字符串填充它.组合框配置为自动调整大小(Anchor = Left | Right).

问题是每当调整ComboBox的大小(即调整对话框大小)时,ComboBox的editbox部分将被完全选中/突出显示.在我看来,这给我想要避免的客户造成了非常混乱的影响.

如果ComboBox具有固定大小,则不会出现此问题.

另请注意,更改DropDownStyle不是一个选项 - 我需要手动输入文本的可能性.

我已经尝试过乱用覆盖OnPaint方法,这种方法并不常用.我也尝试清除ComboBox.Resize事件中的选择,它在某种程度上起作用,但似乎是一个非常难看的解决方案 - 有很多闪烁,故意选择的文本被取消选择,我将不得不为每个添加事件处理程序和我对话框中的每个ComboBox.

这个问题有更好的解决方案吗?

先感谢您.

问候,安迪

bsn*_*eze 13

这是一个老问题,但我发现它正在寻找答案并最终实现了我自己的解决方案.不妨在这里贴吧,对吗?

    foreach (var cb in Controls.OfType<ComboBox>())
    {
        cb.Resize += (sender, e) => {
            if (!cb.Focused)
                cb.SelectionLength = 0;
        };
    }
Run Code Online (Sandbox Code Playgroud)

故意选择的文本被取消选中

此WinForms错误不会影响选定的ComboBox,因此通过忽略具有Focus的那些,我们会处理丢失当前选择的问题.

我必须在我的对话框中为每个ComboBox添加事件处理程序.

由foreach循环照顾.如果您不想破坏设计器,或让设计师破坏它,请将它放在InitializeComponent()或.ctor中.

有很多闪烁

如果我快速调整大小,我只会看到闪烁,但我在Win7上,所以在XP上可能会有所不同.