user2102327
user2102327

Reputation: 109

How to disable the automatic selection of the first item in ComboBox?

I have a form with a ComboBox, which is populated with 3 items.
When I add the statements: comboBox1.Text = "A"; and comboBox1.DroppedDown = true;
the first item of the drop-down list is automatically selected: the comboBox1.Text shows "Abc" in stead of "A".
Here is the code:

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

How can I disable the automatic selection of the first item in the Items collection of the ComboBox, so that the comboBox1.Text will show "A" and not "Abc"?
I am not looking for a one-time work-around. I need a GENERAL SOLUTION.

Upvotes: 0

Views: 2151

Answers (5)

Jeff Orange
Jeff Orange

Reputation: 21

I only wanted to prevent the default selection of the first item. I wanted the combobox to be empty, but you could stil use the drop down list for a list value.

This solved my problem: After populating the combobox list, set the selected index to -1, like this:

comboBox1.SelectedIndex = -1;

For the OP, if you want to set the value to something that's not in the list, do this:

comboBox1.SelectedIndex = -1;
comboBox1.Text = "A";

In my test the combobox had value "A", which was not in the drop down list's values.

Upvotes: 0

Ray Chakrit
Ray Chakrit

Reputation: 480

I see no way to disable auto selection of an item. I can only replace the wrong selection with the input text that was previously known. This bug occurs on both opening or closing the dropdown. Here is an example code when opening the dropdown.

    // record
    box_txt = comboBox1.Text;
    box_pos = comboBox1.SelectionStart;

    // drop down
    comboBox1.DroppedDown = true;

    // replace
    comboBox1.Text = box_txt;
    comboBox1.SelectionStart = box_pos;

Upvotes: 0

Loathing
Loathing

Reputation: 5266

If you copy the ComboBoxAutoSelectEx from the link in the comment, then the only thing you should have to do in your own Form1 code is:

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

Upvotes: 0

user2102327
user2102327

Reputation: 109

With the help of the thread that Loathing pointed to, I copied the extension Class ComboBoxAutoSelectExtension and in the form I just added the line of code: ComboBoxAutoSelectExtension.AutoSelectOff(comboBox1);

Upvotes: 0

persian-theme
persian-theme

Reputation: 6638

set this code 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;
}

Upvotes: 0

Related Questions