使用标签设置 "mouseDown" 布尔值

Setting a "mouseDown" bool using labels

我试图建立一个系统来检查是否在 winforms 应用程序中单击了鼠标,但最终还是这样做了

private void lblChips_MouseDown(object sender, MouseEventArgs e)
    {
        mouseDown = true;
    }

    private void lblChips_MouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;
    }

8 次(每个标签)。

有人知道是否有更有效的方法吗?我尝试使用

    private void frmGame4_MouseDown(object sender, MouseEventArgs e)      
        {
            mouseDown = true;
        }

        private void frmGame4_MouseUp(object sender, MouseEventArgs e)
        {
            mouseDown = false;
        }

但这不起作用。任何帮助将不胜感激。

你可以制作两种方法,一种用于鼠标弹起,一种用于鼠标按下,如下所示:

private void labels_mouseDown(object sender, MouseEventArgs e) 
{
   mouseDown = true;
}

private void labels_mouseUp(object sender, MouseEventArgs e)
{
   mouseDown = false;
}

然后,link将所有标签添加到这些方法中。您也可以通过代码执行此操作:

label.mouseDown += labels_mouseDown;
label.mouseUp += labels_mouseUp;

这必须在 InitializeComponent() 下的某处完成;方法。您仍然需要为每个标签执行此操作,但最终代码更少。

这个

 public Form1()
    {
        InitializeComponent();
        CollectFormControls(this);
        ControlList.Add(this);
        MergeEvents();
    }
    List<Control> ControlList = new List<Control>();
    private void CollectFormControls(Control c)
    {
        foreach (Control control in c.Controls)
        {
            ControlList.Add(control);
            CheckSubControls(control);
        }
    }
    private void CheckSubControls(Control control)
    {
        if (control.Controls.Count > -1)
        {
            CollectFormControls(control);
        }
    }
    private void MergeEvents()
    {
        for (int i = 0; i < ControlList.Count; i++)
        {
            ControlList[i].MouseDown += All_MouseDown;
            ControlList[i].MouseUp += All_MouseUp;
        }
    }
    public void All_MouseUp(object sender, MouseEventArgs e)
    {
        this.Text = "up";
    }
    public void All_MouseDown(object sender, MouseEventArgs e)
    {
        this.Text = "down";
    }