我有一个 Winforms 应用程序,其组合框DropDownStyle
设置为Simple
.
当我调用 时this.InputComboBox.Items.Clear()
,它将文本插入光标从它所在的位置移动到输入框的开头,尽管文本内容没有改变。为什么会发生这种情况,我可以阻止它吗?
看起来这是在 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。否则,我认为您会坚持使用当前的解决方法。
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
那里捕获。