none
有关WinForm中的ComboBox的一个问题,求教! RRS feed

  • 问题

  • 如果在一个ComboBox中,其Item中没有值,DropDownStyle选择的是DropDown,
    现在,实现这个ComboBox的DropDown事件,在事件里面就写一个MessageBox.Show("测试");
    这个时候,运行程序,点击该ComboBox的箭头符号,要点击2次,才会有MessageBox弹出!
    如何解决!!
    我需要的是每次点击都弹出,而且必须是点击箭头!
    知道的请告诉下,谢谢
    2009年10月19日 2:21

答案

  • 你好! 如果是我说的情况,那很难解决,我试了MouseDown事件,同样需要先关闭打开的其他ComboBox控件的列表,然后第二次点击才可以触发! 所以,还是建议修改应用程序的设计!
    周雪峰
    • 已标记为答案 天驰 2009年10月21日 0:59
    2009年10月19日 15:40
    版主

全部回复

  • 第一次点击时,程序将使控件获得焦点。
    第二次点击时,下拉列表弹出。触发DropDown事件。
    第三次点击时,下拉列表收缩。
    第四次点击时,下拉列表弹出。触发DropDown事件。
    。。。

    我觉得可能是这样~

    2009年10月19日 2:33
  • 在做控件响应之类的测试时,最好不要使用MessageBox,因为MessageBox会干扰消息的产生。

    一个替代方法是在控制台输出消息。

    2009年10月19日 2:37
  • 第二次点击的时候是出发的的DropDownClosed事件


    我想知道的就是,谁有能够只点一次就实现我想要的功能的解决方案或者思路都可以

    2009年10月19日 2:43
  • 你是说只要点击下拉箭头就触发DropDown事件么?这是不可能的。

    如果你只是要响应下拉列表的单点事件,而不是要响应下拉列表弹出这个行为,那你就不应该使用DropDown事件。或许你可以再响应DropDownClosed事件,在其中添加同样的响应逻辑。

    2009年10月19日 2:52
  • 你好!
         这个问题的根源在于ComboBox的DropDown事件是下拉列表弹出之前触发的,我估计你的窗体上不止有一个ComboBox,如果只有一个ComboBox不会出现这个现象的。
         你可以先不添加DropDown事件,然后观察下拉列表弹出的情况,有时下来列表也需要点两次才可以弹出!第一次先关闭其他的ComboBox已经打开的列表,然后才能打开自己的下拉列表,这个是设计使然!
    周雪峰
    2009年10月19日 3:15
    版主
  • 我需要做的是类似于.udl连接的窗体,

    有2个ComboBox,

    ComboBox里面开始时是空的,我点的旁边的箭头的时候就出现值,



    我这边的测试情况是,如果我在点的时候如果不报异常,给ComboBox.Item.Add()方法放入了值的话,没任何问题。否则出问题

     private void cbx_DataBase_DropDown(object sender, EventArgs e)
            {
                try
                {
                    List<string> list_DataBase = new List<string>();

                    cbx_DataBase.Text = "";
                    cbx_DataBase.Items.Clear();

                    string connString = "Data Source=" + cbx_Server.Text + ";Initial Catalog=master;User ID=" + tbx_Name.Text.Trim() + ";Password=" + tbx_Pwd.Text.Trim() + "";

                    list_DataBase = SetDBBLL.GetDataBaseName(connString);

                    foreach (string DataBasename in list_DataBase)
                    {
                        cbx_DataBase.Items.Add(DataBasename);
                    }

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }

    大概的代码

    2009年10月19日 6:15
  • 而且。我刚才另外建了一个页面,只放一个ComboBox,一样出现这样的问题
    2009年10月19日 6:37
  • 如果你的下拉列表是打开的,第一次点箭头会收起下拉列表,第二次才会显示下拉列表!
    周雪峰
    2009年10月19日 9:19
    版主
  • 有什么办法可以解决吗?

    2009年10月19日 15:26
  • 你好! 如果是我说的情况,那很难解决,我试了MouseDown事件,同样需要先关闭打开的其他ComboBox控件的列表,然后第二次点击才可以触发! 所以,还是建议修改应用程序的设计!
    周雪峰
    • 已标记为答案 天驰 2009年10月21日 0:59
    2009年10月19日 15:40
    版主
  • 恩,谢谢,我是仿照udl这种类型文件来做的,我是看它里面实现的类似功能,

    如果在DropDown事件里判断ComboBox.Items里面是否有值,然后根据结果来判断是否需要代码关闭ComboBox的控件的列表

    2009年10月20日 0:31