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

问题描述 投票:0回答:16

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

我尝试过以下方法:

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

似乎没有什么效果。如有任何帮助,我们将不胜感激。

c# .net winforms combobox krypton-toolkit
16个回答
12
投票

我设法通过重写控件/窗口的 OnPaint 事件来完成此任务

combobox1.SelectionLength = 0;

4
投票

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

ComboBox1.SelectedItem = null;

3
投票

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

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

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

如果发生这种情况,您可以执行以下操作:

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

顺便说一句:

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


3
投票

试试这个

combo.SelectedText = String.Empty;

关于您的焦点问题:(MSDN)

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

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

anotherControl.Focus(); 

2
投票

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

combo.selectedindex = -1;

2
投票

我知道,古老的邮政,古老的技术,但是这个丑陋的单线对我有用:

cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };

1
投票

您没有指定用户是否应该能够编辑组合框值。如果不是,则 ComboBox 的

DropDownStyle
应设置为
ComboBoxStyle.DropDownList
。这样,组合框将只允许选择现有值,用户将无法键入新值,并且文本永远不会突出显示。


1
投票

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

new System.Threading.Timer((s) =>
            {
                comboBox1.Invoke(new Action(() =>
                {
                    comboBox1.Select(0, 0);
                }));
            }, null, 10, System.Threading.Timeout.Infinite);

1
投票

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

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

对我有用。


0
投票

不确定您可能在后台做什么,即触发事件等。但是在组合框 selectedindexchanged 事件中您可以添加 anotherControl.Select()。

应该是:)


0
投票

这就是我所做的:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
     this.ActiveControl = cancelButton;
}

0
投票

这三行帮助了我:

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

TabIndex 必须不是第一个,这样它就不是表单中的第一项


0
投票

在我的例子中,选择是在调整大小后出现的。这解决了它:

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

    c.Focus();
    c.Parent.Focus();
};

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

-1
投票

我不在乎这有多旧。我们正在建立一个知识库。

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

Combobox.SelLength :=  0; 

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

Combobox.Style := csDropDownList; 

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

谢谢你。效果很好!


-1
投票

使用样式 --> csOwnerDrawFixed。

© www.soinside.com 2019 - 2024. All rights reserved.