1

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

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

4

2 回答 2

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。否则,我认为您会坚持使用当前的解决方法。

于 2013-07-19T07:33:25.240 回答
0

SelectionStart您可以通过使用and为您的组合框实现一点状态管理来完成此操作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那里捕获。

于 2013-07-18T19:18:15.240 回答