各位大侠老师好.
   我最近写一个小东西,用户提出了两个易用方面的要求:
   1. 对于Combobox这样的控件,在组合框里输入文本的时候要有自动完成功能
  
   2. 按下回车键后,焦点从一个控件转移到下一个控件(等于按Tap键)   这个两个功能分开都能实现,但是同时启用则由问题. 我发现
    如果设置Combobox的AutoCompleteMode 和AutoCompleteSource属性,同时注册Combobox的KeyPress事件,则KeyPress事件失效;
   如果设置设置Combobox的AutoCompleteMode 和AutoCompleteSource属性,同时注册Combobox的KeyDown事件,则自动完成失效.   我考虑是不是MS对于自动完成事件就是通过注册KeyPress或者KeyDown事件完成的?如果我自己接管了这两个事件则冲突了?   如果我想两者都实现,是不是要自己实现Combobox的自动完成呢?或是有其他简便办法?  

解决方案 »

  1.   

    有属性 AutoCompleteMode
    KeyPress判断回车,然后你想让那个组件由焦点,就设置组件的Focused
      

  2.   

    2楼大哥的意思是: 只用AutoCompleteMode属性么? 然后配合KeyPress?我刚测试了 如果只设置AutoCompleteMode属性,不设置AutoCompleteSource属性:自动完成不能实现,
    按回车键的话,只能让combobox的文本框内容被选中,并不会切换焦点.
      

  3.   

    AutoCompleteSource属性你设的什么?我将AutoCompleteMode设为SuggestAppend,AutoCompleteSource为ListItems
    注册KeyDown事件切换焦点无误.
      

  4.   


    //自动完成下拉框
    DataTable dt = new DataTable();
    dt.Columns.Add("Name");
    dt.Columns.Add("VV");
    dt.Rows.Add(new string[] { "aa", "x" });
    dt.Rows.Add(new string[] { "bb", "z" });
    dt.Rows.Add(new string[] { "cc", "y" });
    dt.Rows.Add(new string[] { "dd", "w" });this.comboBox1.DataSource = dt;
    this.comboBox1.DisplayMember = "Name";
    this.comboBox1.ValueMember = "VV";
    this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
    this.comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
      

  5.   

    我和你设置一样
     AutoCompleteMode设为SuggestAppend,AutoCompleteSource为ListItems
    我注册KEYDOWN判断是回车可以切换焦点,但是自动完成就废了.
      

  6.   

    我问题解决了,注册Keyup事件,AutoCompleteMode设为SuggestAppend,AutoCompleteSource为ListItems
    可以实现:
    1。 Combobox自动完成
    2。 用回车键切换焦点.
      

  7.   

    你是怎么切换焦点呢?
    如果你的界面层次比较多的话,先Select一下.