如何取消选择组合框的文本

时间:2011-10-27 13:33:25

标签: c# .net winforms combobox krypton-toolkit

我有一个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;

似乎没什么用。任何帮助表示赞赏。

15 个答案:

答案 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; 
正如亚历克斯建议的那样。

谢谢。效果很好!