每次做用户输入界面都要拖label和textbox,嫌麻烦,于是自己弄个控件把lable和textbox组合起来做个控件,现在不知道怎么处理键盘事件,在用户设计界面把自定义控件拖进来后,键盘事件都没反应了,请问要怎么实现?好像要处理ProcessCmdKey事件,但不知道怎么入手。。大家帮帮忙啊谢谢了

解决方案 »

  1.   

    回3楼,就是keypress,keydown,keyup事件。。
      

  2.   

    这个我知道啊。可能我没说清楚,看看测试代码
    public partial class frmTest : Form
        {
            public frmTest()
            {
                InitializeComponent( );
            }
            private void ulTextBox1_KeyPress( object sender , KeyPressEventArgs e )
            {
                MessageBox.Show( e.KeyChar.ToString( ) ); // A
            }
            private void textBox1_KeyPress( object sender , KeyPressEventArgs e )
            {
                MessageBox.Show( e.KeyChar.ToString( ) ); // B
            }
        }
    ulTextBox1是自定的控件(包含了一个标准的textbox),textBox1是标准的TextBox控件,现在的问题是 A 处的代码不会像B处一样能Show出来
      

  3.   

    在ulTextBox1里写(包含了一个标准的textbox)的事件
      

  4.   

    在自定义控件里定义一个char类型的全局变量,
    用来接收在ulTextBox1里的标准的textbox的KeyPress事件里的e.KeyChar
    你的这个private void ulTextBox1_KeyPress事件的key是自定义控件的key,
    不是里面包含的标准textbox的key。
      

  5.   

    参考代码:public partial class UlTextBox : UserControl
    {
        //
        //假如如下label以及textBox是你自定义控件的成员, 正确处理方法应该这样...
        //
        
        Label label = new Label();
        TextBox textBox = new TextBox();
        
        public UlTextBox()
        {
            InitializeComponent();
            //注册事件...
            textBox.KeyPress += new KeyPressEventHandler(textBox_KeyPress);
        }
        
        private void textBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            base.OnKeyPress(e); //触发事件...
        }
    }然后尝试:public partial class frmTest : Form
    {
        public frmTest()
        {
            InitializeComponent();
        }    private void ulTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            MessageBox.Show(e.KeyChar.ToString()); // A 
        }    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            MessageBox.Show(e.KeyChar.ToString()); // B 
        }
    }大功告成.
      

  6.   

    恩恩,受到9楼benyouyong 的启发,一下醒悟了,直接在base里面调用下就可以了。。shinaterry咋现在才发捏???刚好在我想通的时候。。
    结贴。谢谢。
      

  7.   

    -_-!!! 必要时在UlTextBox获得焦点(激活)事件当中加上: textBox.Focus();