如何禁用 ComboBox 中第一项的自动选择?

Posted

技术标签:

【中文标题】如何禁用 ComboBox 中第一项的自动选择?【英文标题】:How to disable the automatic selection of the first item in ComboBox? 【发布时间】:2021-05-22 09:19:20 【问题描述】:

我有一个带有 ComboBox 的表单,其中填充了 3 个项目。 当我添加语句时:comboBox1.Text = "A";和 comboBox1.DroppedDown = true; 自动选择下拉列表的第一项:comboBox1.Text 显示“Abc”而不是“A”。 代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace testComboBox

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        
            comboBox1 = new ComboBox();
            PopulateComboBox();            
            comboBox1.Location = new Point((this.Width - comboBox1.Width) / 2, 80);            
            this.Controls.Add(comboBox1);

            comboBox1.Text = "A";
            comboBox1.DroppedDown = true;
        

        ComboBox comboBox1;

        private void PopulateComboBox()
        
            comboBox1.Items.Add("Abc");
            comboBox1.Items.Add("Abcd");
            comboBox1.Items.Add("Abcde");
        

        private void button_Exit_Click(object sender, EventArgs e)
        
            this.Close();
        
    

如何禁用自动选择 ComboBox 的 Items 集合中的第一项,以便 comboBox1.Text 显示“A”而不是“Abc”? 我不是在寻找一次性的解决方法。我需要一个通用的解决方案。

【问题讨论】:

反转分配:comboBox1.DroppedDown = true; comboBox1.Text = "A";。将这些行移至Load 事件/OnLoad() 方法。或OnShown()(可能更好)。 ***.com/questions/60107053/… @Loathing 非常感谢您的评论。我在线程中看到:Prevent AutoSelect behavior of a ystem.Window.Forms.ComboBox (C#) 扩展类:ComboBoxAutoSelectEx 确实帮助了几个人。我复制了它,它编译得很好。我不得不承认,虽然我不知道该怎么处理它。能否请您发布几行代码以举例说明我如何将其合并到我的程序中并与comboBox1一起使用?非常感谢您的善意、努力和时间。 【参考方案1】:

设置此代码comboBox1.SelectedText = null;

public Form1()

    InitializeComponent();
        
   comboBox1 = new ComboBox();
   PopulateComboBox();            
   comboBox1.Location = new Point((this.Width - comboBox1.Width) / 2, 80);            
   this.Controls.Add(comboBox1);

   comboBox1.SelectedText = "A";
   comboBox1.DroppedDown = true;
   comboBox1.SelectedText = null;

【讨论】:

这不可能是正确的,因为语句:comboBox1.SelectedIndex = 0;专门选择 ComboBox 的 Items 集合中的第一项,这正是我想要阻止的。 你可以使用comboBox1.SelectedText = "A" 重点是comboBox1.Text显示“A”。用语句:comboBox1.SelectedText = "A" ;什么都没有显示! 添加此代码comboBox1.SelectedText = null;我更新了代码 这不会阻止自动选择第一个项目并且不会显示“A”。【参考方案2】:

在 Loathing 所指的线程的帮助下,我复制了扩展类 ComboBoxAutoSelectExtension,并在表单中添加了以下代码行:ComboBoxAutoSelectExtension.AutoSelectOff(comboBox1);

【讨论】:

【参考方案3】:

如果您从评论中的链接复制ComboBoxAutoSelectEx,那么您唯一需要在自己的Form1 代码中做的事情是:

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
        
        comboBox1 = new ComboBox();

        String text = "A";
        comboBox1.Text = text;
        comboBox1.Select(text.Length,1); // put cursor at the end of text
        ComboBoxAutoSelectEx.AutoSelectOff(comboBox1); // Added

        PopulateComboBox();            
        comboBox1.Location = new Point((this.Width - comboBox1.Width) / 2, 80);            
        this.Controls.Add(comboBox1);

    

    protected override void OnLoad(EventArgs e)  // Added
        base.OnLoad(e);
        comboBox1.DroppedDown = true;           
    

    ComboBox comboBox1;

    private void PopulateComboBox()
    
        comboBox1.Items.Add("Abc");
        comboBox1.Items.Add("Abcd");
        comboBox1.Items.Add("Abcde");
    

    private void button_Exit_Click(object sender, EventArgs e)
    
        this.Close();
    

【讨论】:

@oathing 非常感谢!一段时间后,我发现了自己,正如您在我发布的答案中看到的那样。

以上是关于如何禁用 ComboBox 中第一项的自动选择?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中,如何找到不是某个值的列表中第一项的索引?

如何更改组合框PyQt4中第一项的字体大小

easyui下拉列表级联操作,加载完毕后自动默认加载第一项的下级菜单

[Siverlight入门系列]MVVM模式下如何让下拉框ComboBox默认选中第一项

selected中第一项 请选择,隐藏

combox控件加载时不在框里显示第一项怎么办