C# 如何取消选择组合框的文本
我有一个氪组合框,我用键值对列表绑定它。发生的事情是,当我在代码中设置所选项目时,它会高亮显示文本。如何防止此情况或取消选择文本 我尝试了以下方法:C# 如何取消选择组合框的文本,c#,.net,winforms,combobox,krypton-toolkit,C#,.net,Winforms,Combobox,Krypton Toolkit,我有一个氪组合框,我用键值对列表绑定它。发生的事情是,当我在代码中设置所选项目时,它会高亮显示文本。如何防止此情况或取消选择文本 我尝试了以下方法: // 1 combo.Select(0,0); // 2 combo.Focus(); anotherControl.Focus(); // 3 combo.SelectionStart = 0; combo.SelectionLength = combo.Text.Length; // 4 combo.SelectionStart = comb
// 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;
foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
{
cbo.SelectionLength = 0;
}
似乎什么都不管用。感谢您的帮助。试试这个
combo.SelectedText = String.Empty;
关于您的焦点问题:()
当组合框失去焦点时,选择点移动到
文本的开头和任何选定的文本将变为未选定
真奇怪;为什么以下各项不起作用:
anotherControl.Focus();
不确定您可能在后台执行什么操作,例如触发事件等。但是,在combox selectedindexchanged事件中,您可以添加另一个控件。Select()
那应该是:)我知道你问这个问题已经有一段时间了。但这是你能做的
combo.selectedindex = -1;
我可能已经找到了一个有效的解决方案: 如果您正在使用表单,请订阅该表单显示的事件 或 如果您使用的是UserControl(像我一样),则可以订阅VisibleChanged事件 在这种情况下,您可以执行以下操作:
// 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;
foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
{
cbo.SelectionLength = 0;
}
foreach(ComboBox cbo in(this.Controls.Cast()。其中(c=>c是ComboBox)。选择(c=>(ComboBox)c)))
{
cbo.SelectionLength=0;
}
旁白:
最后,我不得不为一个用户控件这样做,在该控件中,我向控件添加了组合框,然后需要稍后动态设置它们的大小。设置大小会导致OP遇到的突出显示。以下是我要做的:
private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.ActiveControl = cancelButton;
}
您没有指定用户是否应该能够编辑组合框值。如果没有,则组合框的
DropDownStyle
应设置为ComboBoxStyle.DropDownList
。这样,组合框将只允许选择现有值,用户将无法键入新值,文本将永远不会突出显示。我试图覆盖控件/窗口的OnPaint事件并执行以下操作
combobox1.SelectionLength = 0;
这三句话帮助了我:
cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;
TabIndex必须不是第一个,因此它不是表单中的第一项您只需将此代码放置在生成的事件上,或单击要取消选择组合框文本的按钮
ComboBox1.SelectedItem = null;
我不管这有多老。我们正在建立一个知识库 我使用D5(可能以前的版本也一样)。您需要使用:
Combobox.SelLength := 0;
此外,如果这不起作用,那么这一个可以:避免使用默认样式(csDropDown)。
并将其设置为:
Combobox.Style := csDropDownList;
正如亚历克斯建议的那样
多谢各位。很好 在我的例子中,选择在调整大小后出现。这就解决了它:
textBox.Resize += (sender, args) =>
{
Control c = sender as Control;
if (c == null || c.Parent == null)
return;
c.Focus();
c.Parent.Focus();
};
在事件SelectedIndexChanged上添加计时器,该计时器将在10毫秒后仅执行一次
new System.Threading.Timer((s) =>
{
comboBox1.Invoke(new Action(() =>
{
comboBox1.Select(0, 0);
}));
}, null, 10, System.Threading.Timeout.Infinite);
订阅“SelectedIndexChanged”事件,该事件的任务是设置组合框的焦点
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Focus();
}
从主窗体订阅“绘制”事件。取消选择发生在此事件处理程序中:
private void MainForm_Paint(object sender, PaintEventArgs e)
{
comboBox1.SelectionLength = 0;
}
“选择”对我不起作用。但我发现了一个非常简单的窍门。 将此权限添加到SelectedIndexChanged事件中:
comboBox1.Hide();
comboBox1.Show();
对我有用 我知道,古老的邮政,古老的技术,但这条丑陋的单行线对我有用:
cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };
这是奇怪的,当我点击它加载后,然后点击其他东西,然后重点的东西工作!??!这让我抓狂你的组合框是否绑定到某个数据源?如果是,请尝试SelectedIndex=-1它是绑定的,但我会从列表中选择一项。这基本上是一个从db中预填充的表单,因此我需要选择正确的项。谢谢,但我没有试图更改所选项,我只是想取消突出显示文本。我与OP有相同的问题,这无助于完成此操作,我以后无法突出显示文本。它每次都会被取消选择,因为OnPaint方法经常被调用。对不起,这里显示的语法看起来根本不像C#。D5?你是说德尔菲吗?在[C#]标记的问题中?OP没有试图更改所选项目,他只是想取消突出显示文本。