检测点击触摸屏的两个按钮

Posted

技术标签:

【中文标题】检测点击触摸屏的两个按钮【英文标题】: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,以便用户看不到它。如果是触摸屏,可以同时触摸两个按钮。 【参考方案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;

        
    

【讨论】:

以上是关于检测点击触摸屏的两个按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIButton 进行触摸检测

检测 UIButton 触摸子视图

未检测到 SKSpriteNode 触摸

目标c:从视图/图像/按钮外部开始触摸时检测触摸开始/向下

如何检测iCarouselButtonDemo的触摸点?

在 ios 的滚动视图内检测按钮的触摸