winform 窗体内有多个textbox 我希望使用textbox的自动完成功能,但同时希望用回车来代替tab。也就是说当 自动完成那个下拉框不出现的时候按回车 跳转到下一个textbox,如果处于自动完成状态 则回车并不跳转,只是取得当前选择的值。 
这个应该怎么设置?
怎么判断 自动完成下拉框 是否出现?怎么解决回车冲突的问题?求教!
就这么多分了

解决方案 »

  1.   


    看看这样行不行:private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter && !textBox1.AutoCompleteCustomSource.Contains(textBox1.Text))
            SendKeys.Send("{TAB}");            
    }
      

  2.   

    如果是多个这样的TextBox,可以注册为同一事件:
            
            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                TextBox textBox = sender as TextBox;//触发对象
                if (e.KeyCode == Keys.Enter && !textBox.AutoCompleteCustomSource.Contains(textBox.Text))
                    SendKeys.Send("{TAB}");            
            }
            
      

  3.   

    用事件控制转换键对应的Uncode值应该就可以,你试试。
      

  4.   

     private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyValue == 13)
                    textBox4.Focus();//用户名
            }        private void textBox4_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyValue == 13)
                    comboBox1.Focus();//密码
            }        private void comboBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyValue == 13)
                    this.textBox3.Focus();//权限
            }        private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyValue == 13)//验证码
                    
                    button1_Click(null, null);//登录事件
            }
    再告诉你  禁用TAB键的方法,选择控件(如textBox3等等)的TABSTOP属性,令其为false就可以了
      

  5.   

    禁用TAB 也就达到了 回车代替Tab的功能了
      

  6.   

    不禁用TAB ,回车就不能代替Tab的功能吗
    ?
      

  7.   

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.Enter)
                    textBox2.Focus();
            }
    private void textBox2_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.Enter)
                    textBox3.Focus();
            }
    private void textBox3_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.Enter)
                    textBox4.Focus();
            }
    我这个只能实现回车自动 跳转,楼主可以参考一下!
    不禁用TAB ,回车也能代替Tab的功能
      

  8.   

    俺在网上找到了这个 回馈大家
    先写一个基类的Form,以后每个Form都继承这个Form就可以了 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Text; 
    using System.Windows.Forms; namespace Common 

        public partial class frmBase : Form 
        { 
            public frmBase() 
            { 
                InitializeComponent(); 
            }         protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
            { 
                if (null != ActiveControl && null != ActiveControl.Tag && ActiveControl.Tag.ToString() == "Self-KeyPress") return false; 
                if ((!(ActiveControl is Button)) && (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Enter)) 
                { 
                    if (keyData == Keys.Enter) 
                    { 
                        System.Windows.Forms.SendKeys.Send("{TAB}"); 
                        return true; 
                    } 
                    if (keyData == Keys.Down) 
                        System.Windows.Forms.SendKeys.Send("{TAB}"); 
                    else 
                        SendKeys.Send("+{Tab}"); 
                    return true; 
                } 
                else 
                    return base.ProcessCmdKey(ref msg, keyData); 
            } 
        } 
    }
      

  9.   

    [Quote=引用 10 楼 zxy397472251 的回复:]
    禁用TAB 也就达到了 回车代替Tab的功能了
    [/Quote不禁用也行 TAB和回车意思就一样了1.只需设置控件的TABSTOP属性为TRUE
    2.视图——TAB键顺序——为每个控件编号 
    TABINDEX 越小 越先执行!!比如textBox1的TABINDEX =0;
    textBox2的TABINDEX =1;
     焦点在textBox1 tab键就跳转到textBox2;
     你可按你想要执行的顺序对控件的TABINDEX  按顺序编号 就可以了
    说得够详细了吧MARK~~~~~~
      
      

  10.   

    问题是 怎么判断 textbox 自动完下拉框 是否出现 
    3楼的貌似不行。因为选到那个的时候就自动为textbox添加了,但是还没有按回车。
      

  11.   

    在键盘输入事件里面把回车键的keyCode改为Tab键的keyCode就可以实现Tab键功能啦
      至于怎么判断 自动完成下拉框 是否出现?
     那就要具体的做一些判断啦
      

  12.   

    System.Windows.Forms.SendKeys.Send("{TAB}"); 
      

  13.   

            #region "KeyDown"        public void MonitorKeyDown(WebControl c)
            {
                RegisterKeyDownScript();
                c.Attributes["onkeydown"] = "javascript:KeyDownEventHandler();";
            }        protected void RegisterKeyDownScript()
            {
                ClientScriptManager cs = Page.ClientScript;
                System.Type cstype = this.GetType();
                if (!cs.IsClientScriptBlockRegistered(cstype, "CSP-keydown-function"))
                {
                    cs.RegisterClientScriptBlock(cstype, "CSP-keydown-function",
                          "<script language=\"JavaScript\">" + "\r\n"
                        + "function KeyDownEventHandler() {" + "\r\n"
                        + "    if(event.keyCode==13)event.keyCode=9;" + "\r\n"
                        + "}" + "\r\n"
                        + "</script>");
                }
            }        #endregion