我有一个带有组合框的Winforms应用程序,其DropDownStyle
设置为Simple
。
当我调用this.InputComboBox.Items.Clear()
时,它会将文本插入光标从输入框的开头移动到输入框的开头,尽管文本内容不变。为什么会发生这种情况,我可以阻止吗?
答案 0 :(得分:1)
看起来这是在ObjectCollection类中调用的 ClearInternal 方法的默认行为。
如果您没有大量项目,您可以轻松创建一个可以使用的扩展名,而不是Clear方法。类似的东西:
public static void SafeClearItems(this ComboBox comboBox)
{
foreach (var item in new ArrayList(comboBox.Items))
{
comboBox.Items.Remove(item);
}
}
默认的Clear方法比这更好,它在内部使用Array.Clear,但是你无法使用它,因为你无法访问实际存储项目的ObjectCollection的InnerList。否则我认为你坚持使用当前的解决方法。
答案 1 :(得分:0)
您可以通过使用SelectionStart
和SelectionLength
为您的组合框实施一些状态管理来实现此目的,例如
int _selectionStart = 0;
private void Clear_Click(object sender, EventArgs e)
{
...
this.comboBox1.Items.Clear();
this.comboBox1.Focus();
this.comboBox1.SelectionStart = _selectionStart;
this.comboBox1.SelectionLength = 0;
}
private void InputComboBox_KeyDown(object sender, KeyEventArgs e)
{
_selectionStart = this.InputComboBox.SelectionStart;
}
...这不能处理鼠标,所以你需要连接一个额外的事件并在那里捕获_selectionStart
。