有个问题想请教下,如何获取方向键的消息?及怎么处理的?
我想实现这样一个功能,当焦点在一个label上,按下方向右键就弹出另一个label;
我是个新手,大家帮忙讲详细点吧!
能给点例子和资料吗?
3Q

解决方案 »

  1.   

    Label不能有焦点,是TextBox吗?
            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.Right)
                {
                    Label label = new Label();
                    label.Parent = this;
                    label.Location = new Point(300, 100);
                    label.Size = new Size(100,100);
                    label.Text = "OK";
                    e.SuppressKeyPress = true;
                }
            }
      

  2.   

    KeyDown是在字符显示到textbox之前调用,KeyDown是在字符显示到textBox之后调用private void txtkey_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
                {            }
            }
    private void txtkey_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
                {            }
            }
      

  3.   

    噢?Label不能获取焦点的吧?搂主需求再描述清楚些?
      

  4.   

    我说的不清楚,不好意思!
    我的意思是当有一个方向右键的消息时(就是第一个label有一个右键事件),就画出一个label.
    我不理解c#的消息机制是怎么实现的,就像C++中的WM_KEYDOWN
    这样应该怎么写?
      

  5.   

    我用了KeyEventHandler,怎么不能接受到键盘消息呢?
    用MouseEventHandler却能接受到鼠标消息。
    怎么解决呢?
      

  6.   

    label控件默认是接受不了焦点的,从而就触发不了键盘事件的。如果搂主就想处理Label控件的键盘事件的话,那么就必须让他获得焦点。
    下面是单击Label控件获得焦点后,通过PreviewKeyDown来处理键盘事件的方法:
    private void label1_Click(object sender, EventArgs e)
    {
        this.label1.Focus(); //点击标签后,让标签强制获得焦点
    }private void label1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyData == Keys.Right) //如果是右方向键
        {
            //创建一个新的Label
            Label newLabel = new Label();
            newLabel.Text = "新的标签";
            newLabel.SetBounds(10, 10, 80, 20);
            this.Controls.Add(newLabel);
        }
    }
      

  7.   

    To(net5i)
    鼠标事件能用,用键盘事件的话,控件无法接受消息!
    这怎么解决啊?
      

  8.   

    很多人说LABEL控件不是不能设置焦点吗?
    this.label1.Focus(); 
    这样能行吗?
      

  9.   

    this.label1.Focus();是可以的,强制使label获得焦点,楼主可以试试
      

  10.   

    回搂主9楼,label控件获得焦点以后,就能接受键盘消息,搂主可以试验一下我贴出的代码