C#_ 使按钮可以被鼠标或键盘按下

C#_ Making buttons be pressed by either mouse or keyboard

好的,所以在我的程序中,我尝试制作按钮并为按下的每个按钮分配不同的方法。但是我遇到了一个问题,我还希望用户使用他的键盘并将键盘上按下的按钮分配给屏幕上的相同按钮。然而首先,我尝试了如果按钮被鼠标或键盘按下但该方法不允许 'EventArgs' 中的 KeyEvents(这对我来说很好),所以我创建了不同的方法并创建了一个布尔变量,以便如果在那按下键的单独方法,使该变量为真,如果为真,则在该主要方法中执行代码,但程序忽略了该键盘变量,我不知道为什么。

然后我尝试制作一个不同的 class,因为我认为这可能会有所帮助。现在我可以在其中调用 class 和方法,但不传递参数,因为它说这是一个方法,所以它不能做任何其他事情,只能被调用。

如果你很好奇,下面是代码...

___
// the button '1' variable
bool pressOne = false;

___
// method for if that button is pressed
private void AnyNumberClick(object sender, EventArgs e)
{
   Button btnSender = (Button)sender;

   if (btnSender == btn_Num1 || pressOne)
   {
      // if button is pressed by either, perform code   
   }
}

___
// method for detecting which key is pressed for certain bool variable into button's method
public void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.D1)
            {
                pressOne = true;
            }
            else
            {
                pressOne = false;
            }

___
// Call another class inside 'From1_KeyDown' method

Class1 newclass = new Class1();

newclass.buttonused();

NumResult.Text = newclass.buttonused.num();

那个class不知道怎么下手。我什至不知道 new class 是否会帮助我。我做了研究,但没有找到答案。感谢您提供的任何帮助。

这样试试。我设置了一个 Dictionary<Keys, Button> 来表示键和按钮之间的关系。然后我覆盖了 ProcessCmdKey() 来捕获按键。如果按下的键存在于我们的查找中,那么我们用 .PerformClick():

单击它
public partial class Form1 : Form
{

    private Dictionary<Keys, Button> btnLookups = new Dictionary<Keys, Button>();

    public Form1()
    {
        InitializeComponent();

        // make your key -> button assignments in here
        btnLookups.Add(Keys.F1, button1); 
        btnLookups.Add(Keys.F2, button2);
        btnLookups.Add(Keys.F3, button3);
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        Button btn;
        if (btnLookups.TryGetValue(keyData, out btn))
        {
            btn.PerformClick();
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("button1");
    }

    private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show("button2");
    }

    private void button3_Click(object sender, EventArgs e)
    {
        MessageBox.Show("button3");
    }

}

您需要一个事件处理程序来绑定您的方法“AnyNumberClick”。这是在表单的 Designer.cs 部分完成的。创建一个字符数组 char[] 并在按钮按下事件方法中创建一个函数,然后将按下的按钮与数组中的字符集进行比较。

private void txt_box_keypress(object sender, KeyPressEventArgs e)
    {
    char[] SomeArray = {'a','b','c', etc};
    int LengthOfArray = SomeArray.Length;

for (int x = 0; x < LengthOfArray; x++)
    {
    if (txt_box.Text.Contains(SomeArray[x]))
    {
    'Your method event here'
    }
  }
}