C# 在OnLoad方法的WinForms组合框中设置SelectedIndex
如果我在C# 在OnLoad方法的WinForms组合框中设置SelectedIndex,c#,winforms,combobox,C#,Winforms,Combobox,如果我在OnLoad方法中设置组合框的SelectedIndex,组合框内的文本也会被选中 protected override void OnLoad(EventArgs e) { base.OnLoad(e); comboBox.Items.Add("Zero"); comboBox.Items.Add("One"); comboBox.Items.Add("Two"); comboBox.SelectedIndex = 2; } 如果我使用sh
OnLoad
方法中设置组合框的SelectedIndex
,组合框内的文本也会被选中
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
comboBox.Items.Add("Zero");
comboBox.Items.Add("One");
comboBox.Items.Add("Two");
comboBox.SelectedIndex = 2;
}
如果我使用shown上的方法设置SelectedIndex,它将按预期工作:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
comboBox.SelectedIndex = 2;
}
为什么会发生这种情况?我如何避免这种行为?特别是在Usercontrol内部,没有可以使用的OnShown方法。因此,我的解决方法无法与custum UserControl一起使用。如果文本被选中,请尝试将焦点返回到表单
但一般来说,人们通常不希望组合框选项实际上是可编辑的,这也会阻止您的情况发生。如果您不想聚焦
组合框只需将焦点更改为其他控件即可
像
TextBox1.Select()
通过将DropDownStyle属性设置为:dropdownlist,您可以将组合框更改为dropdownlist。只需在OnLoad方法中的另一个文本框上调用Focus
。文本仍有标记。我已更正了我的答案。您可以使用TextBox1.Select()代码>。在我的特殊情况下(我确实想把焦点放在另一个文本框上),它应该可以工作,但并不总是合适的。有时没有其他的控制权可以跳到。但是我还是接受了你的答案代码>也可以避免此问题。但至少应该有一些控件来避免这种选择的可见性。像TextBox1.TabIndex=1代码>将dropdownstyle更改为:dropdownlist这会在UI中添加大量的chrome,这是客户根本不喜欢的。这也是我的第一个猜测。你可以自己设置颜色,以符合你的需要。