0

背景:

摇杆-Razor锐机大师

视觉工作室 2019

C# 中的 Windows 窗体

我试图弄清楚如何按下物理操纵杆按钮,使用 C# 在 Visual Studio 中按下 Windows 窗体 UI 上的按钮。

物理摇杆代码:

private void joystickTimer_Tick_1(object sender, EventArgs e)
    {
        try
        {
            joystick.UpdateStatus();
            joystickButtons = joystick.buttons;

            if (joystick.Xaxis == 0)
                output.Text+="Left\n";

            if (joystick.Xaxis == 65534)
                output.Text+="Right\n";

            if (joystick.Yaxis == 0)
                output.Text+="Up\n";
            
            if (joystick.Yaxis == 65535)
                output.Text+="Down\n";

            

            for (int i = 0; i < joystickButtons.Length; i++)
            {
                // Assigning buttons
                if (joystickButtons[0] == true)
                    output.Text += "Cross\n";
                

                else if(joystickButtons[1] == true)
                    output.Text += "Circle\n";

                else if(joystickButtons[2] == true)
                    output.Text += "Square\n";


                else if (joystickButtons[3] == true)
                    output.Text += "Triangle\n";
                    Btn_Emergency_Stop_Click(sender,e); //Attempt at button press
                   //Btn_Emergency_Stop_Click.Click += joystickButtons[3];
                    break;
            }
        }
        catch
        {
            joystickTimer.Enabled = false;
            connectToJoystick(joystick);
        }
    }

要按下的虚拟按钮:

private void Btn_Emergency_Stop_Click(object sender, EventArgs e)
    {

        bool showed = false;
        if (!showed)
        {
            MessageBox.Show("Emergency stop pressed!");
            showed = true;
        }

    }

如果我在提供时遗漏了任何信息,请通知我,谢谢!

4

1 回答 1

0

我已经想出了如何解决这个问题,基本上,我需要在 if 语句的正下方添加按钮方法的调用。否则,如果您将按钮方法的调用放在下面两行,它将无限循环。

private void joystickTimer_Tick_1(object sender, EventArgs e)
    {
        try
        {
            joystick.UpdateStatus();
            joystickButtons = joystick.buttons;

            if (joystick.Xaxis == 0)
                output.Text += "L-Left\n";

            if (joystick.Xaxis == 65535)
                output.Text += "L-Right\n";

            if (joystick.Yaxis == 0)
                output.Text += "L-Up\n";

            if (joystick.Yaxis == 65535)
                output.Text += "L-Down\n";
            
            for (int i = 0; i < joystickButtons.Length; i++)
            {
                switch (i)
                {
                    case 0:
                        if (joystickButtons[0] == true)
                            Btn_Manual_Mode_Click(null, null);
                            break;

                    case 1:
                        if (joystickButtons[1] == true)
                            Btn_Stop_Auto_Click(null, null);
                        break;

                    case 2:
                        if (joystickButtons[2] == true)
                            Btn_Standby_Mode_Click(null, null);
                        break;

                    case 3:
                        if (joystickButtons[3] == true)
                            Btn_Auto_Mode_Click(null, null);
                        break;


                }
            }
        }
        catch
        {
            joystickTimer.Enabled = false;
            connectToJoystick(joystick);
        }
    }
于 2021-01-20T01:26:43.090 回答