我有一个小问题,一直困扰我几个小时.
在我的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上可能会有所不同.