【问题标题】:Detect two buttons clicked for touchscreen检测点击触摸屏的两个按钮
【发布时间】:2016-12-05 02:45:22
【问题描述】:

我有一个 kiosk machine 应用程序,显示为 always on the topfullscreen。另外,我必须关闭explorer.exe

因此,如果没有键盘,我将无法访问任何内容。

我正在考虑做手势或无敌按钮,以便我可以打开explorer.exe无需键盘

我想知道是否有办法检测是否同时点击了两个按钮。我尝试使用以下代码,但它不起作用。

PS:由于我的电脑没有触摸屏,我无法逐行调试。 因此,我无法找出是哪一行导致了问题。

    private bool button1WasClicked = false;
    private bool button2WasClicked = false;

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        button1WasClicked = true;
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        button1WasClicked = false;
    }

    private void button2_MouseUp(object sender, MouseEventArgs e)
    {
        button2WasClicked = false;
    }

    private void button2_MouseDown(object sender, MouseEventArgs e)
    {
        if (button1WasClicked == true)
        {
            Process.Start(Path.Combine(Environment.GetEnvironmentVariable("windir"), "explorer.exe"));
            Application.Exit();
            button1WasClicked = false;
        }
    }

【问题讨论】:

  • 1.打开/关闭 explorer.exe 是什么意思? 2. 最好试试key Modifiers
  • @LeiYang 如果explorer.exe 关闭,任务栏也会消失。我将不得不在维护期间将其重新打开。我需要键盘才能使用key modifiers。正如我在问题中提到的那样,我将不得不在没有键盘的情况下执行此操作。
  • 不可见的按钮如何被点击?
  • 又怎么能同时点击两个按钮呢?
  • @Kinetic 我仍然将visible 属性设置为true,但将FlatStyle 设置为flat。将 BorderColor、MouseDownBackColor 和 MouseOverBackColor 设置为 BackColor,以便用户看不到它。如果是触摸屏,可以同时触摸两个按钮。

标签: c# winforms


【解决方案1】:

你不能用鼠标或键盘同时点击两个按钮,如果你说的是使用触摸屏,WinForms 框架不支持它们(点击最多只会被解释为单独的鼠标点击) .你会想看看使用Surface SDK 或其他东西。

【讨论】:

    【解决方案2】:

    我找到了一个不同的解决方案,其中必须按特定顺序单击按钮(面板)才能实现我想要的。我还添加了一个计时器。下面是我的代码。

        private bool panel1WasClicked = false;
        private bool panel2WasClicked = false;
        int second = 0;
        private void panel1_Click(object sender, EventArgs e)
        {
            MaintenanceTimer.Interval = 500;
            MaintenanceTimer.Start();
            second = 0;
    
            if (panel1WasClicked == false)
            {
                panel1WasClicked = true;
            }
    
            else
            {
                panel1WasClicked = false;
            }
    
        }
    
        private void panel2_Click(object sender, EventArgs e)
        {
            if (panel2WasClicked == false && panel1WasClicked == true)
            {
                panel2WasClicked = true;
            }
    
            else
            {
                panel2WasClicked = false;
            }
    
        }
    
        private void panel3_Click(object sender, EventArgs e)
        {
            if (panel1WasClicked && panel2WasClicked == true)
            {
                //Do something
            }
    
            panel1WasClicked = false;
            panel2WasClicked = false;
            MaintenanceTimer.Stop();
        }
    
        private void MaintenanceTimer_Tick(object sender, EventArgs e)
        {
            second += 1;
            if (second >= 5)
            {
                MaintenanceTimer.Stop();
                second = 0;
                panel1WasClicked = false;
                panel2WasClicked = false;
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多