本帖最后由 litao31415 于 2014-11-18 11:26:45 编辑

解决方案 »

  1.   

    你的combobox的数据源是什么? 对数据源处理,过滤到空字符串  再绑定。
      

  2.   

    添加前,先判断IndexOf,是否存在comb.Items.IndexOf
      

  3.   

    数据来自GetPortNames();。
    string[] serialPortNames = null;
    serialPortNames = SerialPort.GetPortNames();
    我测试过SerialPortcomboBox.Items里面并没有空白字符。但显示却有空白,但不可选。难道是“clear后C#还记住原来有三项,拔掉某串口后剩下两项,最后一项自动加了个空白部分”?
      

  4.   

     SerialPortcomboBox.Items里面数据是正确的,但显示却多了一个空白的不可选项。正确情况应该是这样:
      

  5.   

     
      public partial class Form1 : Form
        {
            string[] a = { "a", "b", "c" };
            string[] b = { "a", "b" };
            public Form1()
            {
                InitializeComponent();
                foreach (string s in a)
                {
                    comboBox.Items.Add(s);
                    comboBox.SelectedIndex = 0;
                }
            }
            private void comboBox_Click(object sender, EventArgs e)
            {
                comboBox.Items.Clear();
                foreach (string s in b)
                {
                    comboBox.Items.Add(s);
                    comboBox.SelectedIndex = 0;
                }
            }
    }
      

  6.   

    serialPortNames 应该没有空字符吧?
      

  7.   

    是没有。public partial class Form1 : Form
        {
            string[] a = { "a", "b", "c" };
            string[] b = { "a", "b" };
            public Form1()
            {
                InitializeComponent();
                foreach (string s in a)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
            private void comboBox_Click(object sender, EventArgs e)
            {
                comboBox.Items.Clear();
                foreach (string s in b)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
    }
    我试了这个代码,也会发生这种情况,而且  string[] a = { "a", "b", "c" ,“d”};则会出现两个空白
      

  8.   

    是没有。public partial class Form1 : Form
        {
            string[] a = { "a", "b", "c" };
            string[] b = { "a", "b" };
            public Form1()
            {
                InitializeComponent();
                foreach (string s in a)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
            private void comboBox_Click(object sender, EventArgs e)
            {
                comboBox.Items.Clear();
                foreach (string s in b)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
    }
    我试了这个代码,也会发生这种情况,而且  string[] a = { "a", "b", "c" ,“d”};则会出现两个空白
    经测试,不会有你说的情况
    我的是VS2005
      

  9.   

    是没有。public partial class Form1 : Form
        {
            string[] a = { "a", "b", "c" };
            string[] b = { "a", "b" };
            public Form1()
            {
                InitializeComponent();
                foreach (string s in a)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
            private void comboBox_Click(object sender, EventArgs e)
            {
                comboBox.Items.Clear();
                foreach (string s in b)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
    }
    我试了这个代码,也会发生这种情况,而且  string[] a = { "a", "b", "c" ,“d”};则会出现两个空白
    在它的DropDown事件中操作,别在click事件中。
      

  10.   

    是没有。public partial class Form1 : Form
        {
            string[] a = { "a", "b", "c" };
            string[] b = { "a", "b" };
            public Form1()
            {
                InitializeComponent();
                foreach (string s in a)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
            private void comboBox_Click(object sender, EventArgs e)
            {
                comboBox.Items.Clear();
                foreach (string s in b)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
    }
    我试了这个代码,也会发生这种情况,而且  string[] a = { "a", "b", "c" ,“d”};则会出现两个空白
    经测试,不会有你说的情况
    我的是VS2005我试了一下,vs2005也会出现耶,第二次点击就会正常
      

  11.   

    是没有。public partial class Form1 : Form
        {
            string[] a = { "a", "b", "c" };
            string[] b = { "a", "b" };
            public Form1()
            {
                InitializeComponent();
                foreach (string s in a)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
            private void comboBox_Click(object sender, EventArgs e)
            {
                comboBox.Items.Clear();
                foreach (string s in b)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
    }
    我试了这个代码,也会发生这种情况,而且  string[] a = { "a", "b", "c" ,“d”};则会出现两个空白
    在它的DropDown事件中操作,别在click事件中。
    真的是这样啊!谢谢啊。但不明白为什么在点击事件上不能正确处理
      

  12.   

    是没有。public partial class Form1 : Form
        {
            string[] a = { "a", "b", "c" };
            string[] b = { "a", "b" };
            public Form1()
            {
                InitializeComponent();
                foreach (string s in a)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
            private void comboBox_Click(object sender, EventArgs e)
            {
                comboBox.Items.Clear();
                foreach (string s in b)
                {
                    comboBox.Items.Add(s);
                }
                    comboBox.SelectedIndex = 0;
            }
    }
    我试了这个代码,也会发生这种情况,而且  string[] a = { "a", "b", "c" ,“d”};则会出现两个空白
    在它的DropDown事件中操作,别在click事件中。
    真的是这样啊!谢谢啊。但不明白为什么在点击事件上不能正确处理
    这个和事件响应顺序有关,触发了click,然后进行add操作,还没有add完,就触发了dropdown事件,此时的 仔细会发现,其实第三项 d 的值是“一闪”而过,之后就成了不可点击的条目。应该选择它的“最终事件”来处理items。
      

  13.   

    哦,我放到button的事件里了,所以不会有这个问题
    话说,你为什么要在点击combobox的时候要去修改combobox???
      

  14.   

    嗯,我想错了,应该在combobox下拉时修改
      

  15.   

    嗯,我想错了,应该在combobox下拉时修改
    下拉时修改也不靠谱吧
    不如做个"重新检测"的按钮,点一下就刷新
    或者调用API检测USB口的接入和拔出,然后刷新
      

  16.   

    嗯,我想错了,应该在combobox下拉时修改
    下拉时修改也不靠谱吧
    不如做个"重新检测"的按钮,点一下就刷新
    或者调用API检测USB口的接入和拔出,然后刷新
    嗯,这个会更加实时刷新,我原本是想要这种效果的,但考虑到,一般只有去点击才会有改变端口的可能,所以选择了这个简单的方法