c# - ComboBox 的 Editbox 部分被自动选中

标签 c# .net winforms combobox

我有一个小问题困扰了我几个小时。

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

问题是,无论何时调整 ComboBox 的大小(即调整对话框的大小),ComboBox 的编辑框部分都会被完全选中/突出显示。在我看来,这会给客户带来非常困惑的影响,我想避免这种情况。

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

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

我已经尝试过重写 OnPaint 方法,但效果不佳。 我还尝试清除 ComboBox.Resize 事件中的选择,这在某种程度上起作用,但似乎是一个非常丑陋的解决方案 - 有很多闪烁,故意选择的文本被取消选择,我必须为每个添加事件处理程序以及我对话框中的每个 ComboBox。

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

提前谢谢你。

问候, 安迪

最佳答案

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

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

intentionally selected text became deselected

此 WinForms 错误不会影响选定的组合框,因此通过忽略具有焦点的组合框,我们解决了丢失当前选择的问题。

I would have to add the event handler to each and every ComboBox on my dialog.

由 foreach 循环处理。如果您不想破坏设计器,或者让设计器破坏它,请将它放在 InitializeComponent() 或您的 .ctor 中。

there was a lot of flicker

我只会在快速调整大小时看到闪烁,但我使用的是 Win7,因此在 XP 上可能会有所不同。

关于c# - ComboBox 的 Editbox 部分被自动选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/786119/

相关文章:

c# - XNA 二维碰撞检测

c# - 在 ASP.NET Core 3.1/5.0 中调用存储过程

c# - 使用反射查找ArrayList对象属性

C# .Net 3.5 解压缩 zip 文件没有第 3 方

c# - 将 WinForm 或控件保存到文件

c# - 每个 RIA 查询都会创建不同的 EF 对象上下文吗?

c# - 从浏览器按顺序从 Azure Blob 存储下载文件

c# - WinRT 上的 StreamSocket 不接收所有数据

c# - 如何在 visual studio 2013 中设置 "Target Framework"?

c# - 在网格 C# 中显示完整的日期时间