我有一个krypton组合框,我将数据绑定到一个键值对列表。发生的事情是,当我在代码中设置所选项目时,它突出显示文本。如何防止这种情况或取消选择文本?
我尝试了以下内容:
// 1
combo.Select(0,0);
// 2
combo.Focus();
anotherControl.Focus();
// 3
combo.SelectionStart = 0;
combo.SelectionLength = combo.Text.Length;
// 4
combo.SelectionStart = combo.Text.Length;
combo.SelectionLength = 0;
似乎没什么用。任何帮助表示赞赏。
答案 0 :(得分:7)
我管理完成此操作会覆盖我的控件/窗口的OnPaint事件并执行
combobox1.SelectionLength = 0;
答案 1 :(得分:3)
我可能找到了一个有效的解决方案:
如果您使用的是表格,请订阅该表格的已显示事件。
或强>
如果您正在使用UserControl(就像我一样),您可以订阅VisibleChanged事件。
在这种情况下,您可以执行以下操作:
foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
{
cbo.SelectionLength = 0;
}
暂且不说:
我最终不得不为用户控件执行此操作,其中我将ComboBox添加到控件中,然后需要稍后动态设置其大小。设置大小导致OP遇到突出显示。
答案 2 :(得分:2)
试试这个
combo.SelectedText = String.Empty;
关于焦点问题:(MSDN)
当组合框失去焦点时,选择点移动到 文本的开头和任何选定的文本都将取消选中
太奇怪了;为什么以下不起作用:
anotherControl.Focus();
答案 3 :(得分:1)
您只需将此代码放在生成的事件或按钮上,然后单击要取消选择组合框文本的位置
ComboBox1.SelectedItem = null;
答案 4 :(得分:1)
在事件SelectedIndexChanged上添加定时器,该定时器将在10毫秒后执行一次。
new System.Threading.Timer((s) =>
{
comboBox1.Invoke(new Action(() =>
{
comboBox1.Select(0, 0);
}));
}, null, 10, System.Threading.Timeout.Infinite);
答案 5 :(得分:1)
我知道,古老的职位,古老的技术,但是这个丑陋的内衬为我工作:
cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };
答案 6 :(得分:0)
不确定你在后台做什么,即触发事件等。但是在combox selectedindexchanged事件中你可以添加anotherControl.Select()。
应该:)
答案 7 :(得分:0)
我知道你提出这个问题已经有一段时间了。但这是你能做的事情
combo.selectedindex = -1;
答案 8 :(得分:0)
以下是我的工作:
private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.ActiveControl = cancelButton;
}
答案 9 :(得分:0)
您没有指定用户是否应该能够编辑ComboBox值。如果没有,则ComboBox的DropDownStyle
应设置为ComboBoxStyle.DropDownList
。这样,ComboBox只允许选择现有值,用户将无法键入新值,文本将永远不会突出显示。
答案 10 :(得分:0)
这三行帮助了我:
cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;
TabIndex必须不是第一个,因此它不是表格中的第一个项目
答案 11 :(得分:0)
在我的情况下,选择调整大小后出现。这解决了它:
textBox.Resize += (sender, args) =>
{
Control c = sender as Control;
if (c == null || c.Parent == null)
return;
c.Focus();
c.Parent.Focus();
};
答案 12 :(得分:0)
订阅“ SelectedIndexChanged”事件,该事件的任务是设置ComboBox的焦点。
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Focus();
}
从主表单中订阅“绘画”事件。取消选择发生在以下事件处理程序中:
private void MainForm_Paint(object sender, PaintEventArgs e)
{
comboBox1.SelectionLength = 0;
}
答案 13 :(得分:0)
“选择”不适用于我。但是我发现了一个非常简单的把戏。 将此权限添加到SelectedIndexChanged-Event中:
comboBox1.Hide();
comboBox1.Show();
为我工作。
答案 14 :(得分:-1)
我不在乎这多久了。我们正在建立一个知识库。
我使用D5(可能以前的版本是相同的)。你需要使用:
Combobox.SelLength := 0;
此外,如果这不起作用,则可以:避免使用默认样式(csDropDown)。 并将其设置为:
Combobox.Style := csDropDownList;
正如亚历克斯建议的那样。
谢谢。效果很好!