【问题标题】:How to disable the automatic selection of the first item in ComboBox?如何禁用 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()(可能更好)。
  • @Loathing 非常感谢您的评论。我在线程中看到:Prevent AutoSelect behavior of a ystem.Window.Forms.ComboBox (C#) 扩展类:ComboBoxAutoSelectEx 确实帮助了几个人。我复制了它,它编译得很好。我不得不承认,虽然我不知道该怎么处理它。能否请您发布几行代码以举例说明我如何将其合并到我的程序中并与comboBox1一起使用?非常感谢您的善意、努力和时间。

标签: c# winforms combobox


【解决方案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 非常感谢!一段时间后,我发现了自己,正如您在我发布的答案中看到的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多