在.NET Compact Framework中单击触发按钮

阿兰

说我有一个带有许多Button和PictureBox控件的面板。每个控件都有一个关联的Click事件。这是一个触摸屏应用程序,因此用户的点击可能会有点不准确(或者触摸屏校准可能并不完美)。因此,我想处理面板上的click事件,然后如果单击接近按钮/图片,则以编程方式调用Button或PictureBox的Click事件。

许多其他答案建议使用“ PerformClick”事件,但Compact Framework不支持此事件。还有其他选择吗?我的代码:

private void pnlButtons_Click(object sender, EventArgs e)
{
    Point ptClick = Control.MousePosition;
    foreach (Control cntrl in pnlButtons.Controls)
    {
        // Make sure the control is visible!
        if (cntrl.Visible)
        {
            // Click close to control?
            if ((ptClick.X > (cntrl.Left - 5)) &&
                (ptClick.X < (cntrl.Right + 5)) &&
                (ptClick.Y > (cntrl.Top - 5)) &&
                (ptClick.Y < (cntrl.Bottom + 5)))
            {
                // Click Button or PictureBox without cntrl.PerformClick?
            }
        }
    }
}
艾伦

首先,尝试子类化按钮,然后从您自己的PerformClick调用click事件。否则,您可以编写一个使用按钮并单击的方法。首先获取控件的句柄,然后p /调用Windows API函数以向其发送mousedown和mouseup事件。我相信这是SendMessage函数。然后,您要做的就是编写逻辑以找到最接近的按钮,并将其传递给函数。或者,将其作为Button的扩展方法编写

https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms644950%28v=vs.85%29.aspx

编辑:这是通过向控件发送mousedown和mouseup消息来模拟单击的完整代码:

// Windows constants for mouse messages
private const int WM_LBUTTONDOWN        = 0x0201;
private const int WM_LBUTTONUP          = 0x0202;

// P/Invoke for SendMessage
[DllImport("coredll.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int nMsg, IntPtr wParam, IntPtr lParam);

// Method to click a control
public void ClickControl(IntPtr hWnd)
{
    // Send a MOUSE_DOWN and MOUSE_UP message to the control to simulate a click
    SendMessage(hWnd, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
    SendMessage(hWnd, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
}

// Method to handle click event on parent Panel control
private void pnlButtons_Click(object sender, EventArgs e)
{
    // See if the click point is close to a (visible) button and if so, click the button.
    // The user was probably a little imprecise or the screen might need re-calibration.
    Point pt = pnlButtons.PointToClient(Cursor.Position);

    // Now look for any Button / PictureBox controls nearby
    foreach (Control cntrl in pnlButtons.Controls)
    {
        Rectangle inflated = cntrl.Bounds;
        inflated.Inflate(4, 5);
        if (cntrl.Visible && inflated.Contains(pt))
        {
            // Simulate a click on the control
            ClickControl(cntrl.Handle);
            break;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

.NET Compact Framework PowerToys

来自分类Dev

.NET Compact Framework上的ILSpy

来自分类Dev

NET Compact Framework中DataGrid内部的ComboBox

来自分类Dev

.NET Compact Framework 2.0中的WebClient

来自分类Dev

消耗.NET 4.0 Web Service的.NET Compact Framework 3.5

来自分类Dev

如何在Windows CE设备上安装.Net Compact Framework

来自分类Dev

.NET Compact框架中的异步TCP服务器

来自分类Dev

从C ++到C#.Net Compact Framework的结构转换中的问题

来自分类Dev

在.NET Compact Framework应用程序中显示最新插入的数据

来自分类Dev

在2008年后的Visual Studio中开发.NET Compact Framework应用程序?

来自分类Dev

TcpClient.Connect在.NET Compact Framework中花费太多时间

来自分类Dev

从C ++到C#.Net Compact Framework的结构转换中的问题

来自分类Dev

有什么方法可以更改.NET Compact Framework 2.0上的输入法

来自分类Dev

重新构造一个Compact Framework .NET 3.5应用程序

来自分类Dev

DbContext无法使用ASP.Net MVC中的SQL Server Compact进行初始化

来自分类Dev

实体框架:在ASP.NET MVC 4中为SQL Server Compact设置正确的连接字符串

来自分类Dev

必须单击两次按钮才能在asp.net中触发回发

来自分类Dev

asp.net按钮单击无法通过jquery在隐藏字段中触发大量数据

来自分类Dev

在Firefox中两次触发asp.net按钮单击事件

来自分类Dev

Compact:Regular中子视图未返回的按钮

来自分类Dev

Compact:Regular中子视图未返回的按钮

来自分类Dev

创建简单队列Compact Framework的最佳实践

来自分类Dev

Asp.Net无法触发按钮单击事件

来自分类Dev

单击按钮时.NET中的ServerClick事件

来自分类Dev

Windows Mobile Compact Framework构建错误:无法创建CAB文件…

来自分类Dev

Compact Framework 3.5引用用户控制错误

来自分类Dev

如何使用Compact Framework以自定义格式显示日期

来自分类Dev

Laravel中with()和compact()有什么区别

来自分类Dev

Sql Compact作为XAP中的嵌入式资源或内容

Related 相关文章

  1. 1

    .NET Compact Framework PowerToys

  2. 2

    .NET Compact Framework上的ILSpy

  3. 3

    NET Compact Framework中DataGrid内部的ComboBox

  4. 4

    .NET Compact Framework 2.0中的WebClient

  5. 5

    消耗.NET 4.0 Web Service的.NET Compact Framework 3.5

  6. 6

    如何在Windows CE设备上安装.Net Compact Framework

  7. 7

    .NET Compact框架中的异步TCP服务器

  8. 8

    从C ++到C#.Net Compact Framework的结构转换中的问题

  9. 9

    在.NET Compact Framework应用程序中显示最新插入的数据

  10. 10

    在2008年后的Visual Studio中开发.NET Compact Framework应用程序?

  11. 11

    TcpClient.Connect在.NET Compact Framework中花费太多时间

  12. 12

    从C ++到C#.Net Compact Framework的结构转换中的问题

  13. 13

    有什么方法可以更改.NET Compact Framework 2.0上的输入法

  14. 14

    重新构造一个Compact Framework .NET 3.5应用程序

  15. 15

    DbContext无法使用ASP.Net MVC中的SQL Server Compact进行初始化

  16. 16

    实体框架:在ASP.NET MVC 4中为SQL Server Compact设置正确的连接字符串

  17. 17

    必须单击两次按钮才能在asp.net中触发回发

  18. 18

    asp.net按钮单击无法通过jquery在隐藏字段中触发大量数据

  19. 19

    在Firefox中两次触发asp.net按钮单击事件

  20. 20

    Compact:Regular中子视图未返回的按钮

  21. 21

    Compact:Regular中子视图未返回的按钮

  22. 22

    创建简单队列Compact Framework的最佳实践

  23. 23

    Asp.Net无法触发按钮单击事件

  24. 24

    单击按钮时.NET中的ServerClick事件

  25. 25

    Windows Mobile Compact Framework构建错误:无法创建CAB文件…

  26. 26

    Compact Framework 3.5引用用户控制错误

  27. 27

    如何使用Compact Framework以自定义格式显示日期

  28. 28

    Laravel中with()和compact()有什么区别

  29. 29

    Sql Compact作为XAP中的嵌入式资源或内容

热门标签

归档