意外的ComboBox行为

时间:2013-03-07 14:04:00

标签: c# winforms combobox

给出以下代码

namespace WindowsFormsApplication1
{
    public class Form1 : Form
    {
        public Form1()
        {
            comboBox1 = new System.Windows.Forms.ComboBox();

            comboBox1.Items.AddRange(new object[] {
            "Item 1",
            "Item 2",
            "Item 3"});
            comboBox1.Location = new System.Drawing.Point(93, 103);
            comboBox1.Name = "comboBox1";
            comboBox1.Size = new System.Drawing.Size(121, 21);
            comboBox1.Text = "Item 1"; // **line 1**

            ClientSize = new System.Drawing.Size(284, 262);
            Controls.Add(this.comboBox1);

            Name = "Form1";
            Text = "Form1";

            comboBox1.Text = "Nanu"; // **line 2**
        }

        private ComboBox comboBox1;

    }
}

我希望我的ComboBox显示“Nanu”(DropDownStyle.DropDown),但它显示“Item 1”。 省略行comboBox1.Text = "Item 1";可以解决这个问题。 将comboBox1.Text = "Nanu";放在OnShown事件处理程序中也可以修复“bug”。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

根据msdn

  

将Text属性设置为null或空字符串(“”)设置   SelectedIndex为-1。将Text属性设置为中的值   Items集合将SelectedIndex设置为该项目的索引。   将Text属性设置为不在集合中的值   保留SelectedIndex不变。

所以,当你这样做时:

comboBox1.Text = "Item 1";

您正在自动选择之前在项目列表中添加的“项目1”。将“Nanu”添加到集合中它应该可以工作:

comboBox1.Items.AddRange(new object[] {
    "Item 1",
    "Item 2",
    "Item 3",
    "Nanu"});