我有一个DropDown DropDownStyle的ComboBox,只要调整窗口大小,就会调整大小。如果ComboBox中至少有一个项目被选中,则调整ComboBox的大小会选择所有文本,从而消除用户之前的文本选择。当窗口失去焦点然后重新获得焦点时,也会发生这种情况。有没有人想出办法防止这种情况发生,或者在发生这种情况后恢复文本选择?
This question描述了未聚焦的ComboBox的相关问题,并包含一个在Resize事件后将SelectionLength重置为0的解决方案。此活动是恢复文本选择的理想候选地点,但我不确定如何在之前获取文本选择它被调整大小吹走了。
答案 0 :(得分:0)
但是我不确定如何在调整大小之前获取文本选择
您可以使用ResizeBegin
事件形式收集此内容。
private int _start;
private int _length;
private void Form1_ResizeBegin(object sender, EventArgs e)
{
_start = comboBox1.SelectionStart;
_length = comboBox1.SelectionLength;
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
comboBox1.SelectionStart = _start;
comboBox1.SelectionLength = _length;
}
或者在组合框调整大小时不断地将其设置回来(也可以在格式化调整大小事件本身到粗略,取决于你喜欢它的方式)。使用此选项,用户将看不到任何更改。在上面的示例中,将在窗体调整大小时选择整个文本。在下面,它不会。
private int _start;
private int _length;
private void Form1_ResizeBegin(object sender, EventArgs e)
{
_start = comboBox1.SelectionStart;
_length = comboBox1.SelectionLength;
}
private void comboBox1_Resize(object sender, EventArgs e)
{
comboBox1.SelectionStart = _start;
comboBox1.SelectionLength = _length;
}
或者,您可以针对不同的事件执行此操作,例如当表单失去焦点等时。
private int _start;
private int _length;
private void Form1_ResizeBegin(object sender, EventArgs e)
{
SaveComboBoxSelectionState(comboBox1);
}
private void comboBox1_Resize(object sender, EventArgs e)
{
SetComboBoxSelection(comboBox1, _start, _length);
}
private void Form1_Deactivate(object sender, EventArgs e)
{
SaveComboBoxSelectionState(comboBox1);
}
private void Form1_Activated(object sender, EventArgs e)
{
SetComboBoxSelection(comboBox1, _start, _length);
}
private void SaveComboBoxSelectionState(ComboBox comboBox)
{
_start = comboBox.SelectionStart;
_length = comboBox.SelectionLength;
}
private void SetComboBoxSelection(ComboBox comboBox, int start, int length)
{
comboBox.SelectionStart = start;
comboBox.SelectionLength = length;
}