20

我有一个氪组合框,我将它与键值对列表进行数据绑定。发生的事情是,当我在代码中设置所选项目时,它会突出显示文本。如何防止这种情况或取消选择文本?

我尝试了以下方法:

// 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;

似乎没有任何效果。任何帮助表示赞赏。

4

15 回答 15

11

我设法做到这一点是覆盖我的控件/窗口的 OnPaint 事件并做

combobox1.SelectionLength = 0;
于 2014-02-26T04:22:59.170 回答
3

我可能找到了一个可行的解决方案:

如果您正在使用表单,请订阅表单的 Shown 事件。

或者

如果您使用的是 UserControl(就像我一样),您可以订阅 VisibleChanged 事件。

在这种情况下,您可以执行以下操作:

        foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
        {
            cbo.SelectionLength = 0;
        }

作为旁白:

我最终不得不为用户控件执行此操作,其中我将 ComboBoxes 添加到控件中,然后需要稍后动态设置它们的大小。设置大小会导致 OP 遇到的突出显示。

于 2012-11-07T23:04:25.640 回答
2

试试这个

combo.SelectedText = String.Empty;

关于您的焦点问题:(MSDN

当组合框失去焦点时,选择点移动到文本的开头,并且任何选定的文本都变为未选中状态

这么奇怪; 为什么以下不起作用:

anotherControl.Focus(); 
于 2011-10-27T13:37:55.890 回答
2

您只需将此代码放在生成的事件或按钮单击要取消选择组合框文本的位置

ComboBox1.SelectedItem = null;
于 2015-02-16T10:39:54.707 回答
2

我知道,古老的帖子,古老的技术,但这个丑陋的 oneliner 对我有用:

cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };
于 2019-08-19T21:58:06.650 回答
1

您没有指定用户是否应该能够编辑 ComboBox 值。如果没有,那么DropDownStyleComboBox 的应该设置为ComboBoxStyle.DropDownList. 这样组合框将只允许选择现有值,用户将无法键入新值并且文本将永远不会突出显示。

于 2013-05-30T08:00:32.407 回答
1

我知道你问这个问题已经有一段时间了。但这是你可以做的

combo.selectedindex = -1;
于 2012-06-29T20:16:45.990 回答
1

在事件 SelectedIndexChanged 上添加将仅在 10 毫秒后执行一次的计时器。

new System.Threading.Timer((s) =>
            {
                comboBox1.Invoke(new Action(() =>
                {
                    comboBox1.Select(0, 0);
                }));
            }, null, 10, System.Threading.Timeout.Infinite);
于 2017-04-29T13:40:00.697 回答
0

这 3 行帮助了我:

cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;

TabIndex 必须不是第一个,因此它不是表单中的第一项

于 2014-10-22T20:25:51.357 回答
0

不确定您可能在后台执行什么操作,即触发事件等。但是在组合框中的 selectedindexchanged 事件中,您可以添加另一个Control.Select()。

那应该:)

于 2011-10-27T14:02:24.207 回答
0

这是我所做的:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
     this.ActiveControl = cancelButton;
}
于 2013-02-05T01:36:51.627 回答
0

订阅“SelectedIndexChanged”事件,该事件具有设置 ComboBox 焦点的任务。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox1.Focus();
}

从主窗体订阅“Paint”事件。取消选择发生在此事件处理程序中:

private void MainForm_Paint(object sender, PaintEventArgs e)
{
    comboBox1.SelectionLength = 0;
}
于 2018-08-28T20:03:07.077 回答
0

“选择”对我不起作用。但我发现了一个非常简单的技巧。将此权限添加到 SelectedIndexChanged-Event 中:

comboBox1.Hide();
comboBox1.Show();

为我工作。

于 2019-01-29T16:43:22.823 回答
0

在我的情况下,选择在调整大小后出现。这解决了它:

textBox.Resize += (sender, args) =>
{
    Control c = sender as Control;
    if (c == null || c.Parent == null)
        return;

    c.Focus();
    c.Parent.Focus();
};
于 2016-09-26T20:42:46.240 回答
-1

我不在乎这是几岁。我们正在建立一个知识库。

我使用 D5(可能以前的版本是相同的)。你需要使用:

Combobox.SelLength :=  0; 

此外,如果这不起作用,则可以:避免使用默认样式 (csDropDown)。并将其设置为:

Combobox.Style := csDropDownList; 

正如亚历克斯建议的那样。

谢谢你。效果很好!

于 2016-06-28T08:43:40.120 回答