我想停止Combobox.Items.Clear()来移动我的文本光标

时间:2013-07-18 19:06:58

标签: .net winforms

我有一个带有组合框的Winforms应用程序,其DropDownStyle设置为Simple

当我调用this.InputComboBox.Items.Clear()时,它会将文本插入光标从输入框的开头移动到输入框的开头,尽管文本内容不变。为什么会发生这种情况,我可以阻止吗?

2 个答案:

答案 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)

您可以通过使用SelectionStartSelectionLength为您的组合框实施一些状态管理来实现此目的,例如

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