C#做上位机时自定义了一个控件,控件对↑键做出反应,发现方向键不好使,按键事件进不去,求助大神!

图片说明
控件主要是想做一个显示速度的条,当按↑时格子文本框变色
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SpeedBar
{
public partial class SpeedBar : UserControl
{
private Int16 SpeedBarflag = 0;
public SpeedBar()
{

        InitializeComponent();
    }

    private void SpeedBar_KeyDown(object sender, KeyEventArgs e)
    {
        Keys key = e.KeyCode;

        switch (key)
        {
                //↑按键
                case Keys.Up:
                SpeedBarflag ++;
                if(SpeedBarflag >5)
                       SpeedBarflag=5;
                if (SpeedBarflag >= 1 && SpeedBarflag<6)
                {
                    switch(SpeedBarflag)
                    {
                        case 1:
                            SpeedBar1.BackColor=System.Drawing.Color.Red;
                            break;
                        case 2:
                            SpeedBar2.BackColor=System.Drawing.Color.Yellow;
                            break;
                        case 3:
                            SpeedBar3.BackColor=System.Drawing.Color.Green;
                            break;
                        case 4:
                            SpeedBar4.BackColor=System.Drawing.Color.Blue;
                            break;
                        case 5:
                            SpeedBar5.BackColor=System.Drawing.Color.Black;
                            break;
                    }
                }

                if (SpeedBarflag > -5 && SpeedBarflag< 1)
                {

                    switch(SpeedBarflag)
                    {
                        case -4:
                            SpeedBarminus5.BackColor=System.Drawing.Color.White;
                            break;
                        case -3:
                            SpeedBarminus4.BackColor=System.Drawing.Color.White;
                            break;
                        case -2:
                            SpeedBarminus3.BackColor=System.Drawing.Color.White;
                            break;
                        case -1:
                            SpeedBarminus2.BackColor=System.Drawing.Color.White;
                            break;
                        case 0:
                            SpeedBarminus1.BackColor=System.Drawing.Color.White;
                            break;
                    }
                }
                break;

                //↓按键

                case Keys.Down:
                SpeedBarflag --;
                if(SpeedBarflag <-5)
                       SpeedBarflag=-5;
                if (SpeedBarflag <= -1 && SpeedBarflag>-6)
                {
                    switch(SpeedBarflag)
                    {
                        case -1:
                            SpeedBarminus1.BackColor=System.Drawing.Color.Red;
                            break;
                        case -2:
                            SpeedBarminus2.BackColor=System.Drawing.Color.Yellow;
                            break;
                        case -3:
                            SpeedBarminus3.BackColor=System.Drawing.Color.Green;
                            break;
                        case -4:
                            SpeedBarminus4.BackColor=System.Drawing.Color.Blue;
                            break;
                        case -5:
                            SpeedBarminus5.BackColor=System.Drawing.Color.Black;
                            break;
                    }
                }

                if (SpeedBarflag < 5 && SpeedBarflag> -1)
                {
                    switch(SpeedBarflag)
                    {
                        case 4:
                            SpeedBar5.BackColor=System.Drawing.Color.White;
                            break;
                        case 3:
                            SpeedBar4.BackColor=System.Drawing.Color.White;
                            break;
                        case 2:
                            SpeedBar3.BackColor=System.Drawing.Color.White;
                            break;
                        case 1:
                            SpeedBar2.BackColor=System.Drawing.Color.White;
                            break;
                        case 0:
                            SpeedBar1.BackColor=System.Drawing.Color.White;
                            break;
                    }
                }
                break;
        }
    }




}

}
一直想不通为啥按键无效,一直找不到焦点一样,Form有一个keypreview好像是管这个的,可自定义控件里没这个选项。。。求助求助,谢了

1个回答

这个原因太简单了,因为你的控件没有获取到焦点,你这样的功能,一般要使用钩子,否则一失去焦点,功能就失灵了,除非你保证焦点总在这个程序的这个控件上

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

1
C#PerformClick可虚拟按钮,但按钮的DOWN和UP怎么表示模拟
2
有没有c#写上位机的教程,写上位机应该不需要知道太多吧,
2
C# 用modbus tcp协议,怎么做一个上未将与多个下位机通讯
2
C#中的serialport.Write与MSCOMM控件的put_output有什么区别?
0
C#写一款ip摄像头上位机,用RealPlayWnd.Handle;为啥是无效的句柄
2
c#串口通信中上位机测试数据组帧
2
怎么把上传的数据转接到另一个程序中去,不动原来的上位机程序呢?
2
请问上位机上如何对下位机c语言写的浮点数进行解包还原得到原始的发送数据?
1
单片机的采集程序采集到浮点数了,然后通过串口传输到上位机的串口控件上
2
怎么在上位机中通过串口控件的内存对发送的数据还原成原始数据?
1
串口通讯中上位机向下位机回发的信息,回发数据是怎么被下位机接受的?
1
上位机跨程序不打开端口如何检测上位机是否给下位机回发了数据包?
3
上传数据到上位机以后,下位机是不是不再保持发送的数据?
2
怎么在一个第三方程序中绕过上位机的端口控件直接往下位机送数据?
1
怎么在第三方的程序中转接来自上位机的串口控件中的写入流
2
请问下位机通过串口线连接的上位机,是怎么和上位机进行日期的同步的
2
小白用c#做上位机,求大神指点
1
c#串口编程后硬件换成网口的问题
3
关于c#做上位机串口接收数据的问题,求大神讲解
4
小白用c#做上位机,求指点啊