为不可见面板触发事件 - .Net

Trigger an event for an invisible Panel - .Net

我创建了一个面板(Windows 表单面板),它覆盖了表单的一个表面。 面板:面板 triggerDataRefreshStudentPanel = new Panel(); 我想触发这个事件(当鼠标进入面板区域时,触发这个事件)

triggerDataRefreshStudentPanel_MouseEnter();

我设置为:

triggerDataRefreshStudentPanel.Enabled = true, triggerDataRefreshStudentPanel.Visible = false;

但是,该事件不起作用,只有当两者都为真时它才起作用。我只想启用面板,但不可见。实际上,我想在鼠标进入某个区域时触发一些东西……这就是我选择这样做的原因。或者,还有其他方法可以做我想做的事吗?

试试 Link 中的这个解决方案 或者尝试制作具有透明背景的面板...这样面板将可见但具有透明背景..

禁用的 and/or 不可见控件不会调用大量输入事件,包括鼠标事件。这就是禁用控件功能的想法。

但是,当鼠标在禁用的 and/or 不可见子控件上操作时,父控件会收到鼠标事件。因此,您可以处理父级的 MouseMove 事件,以便在鼠标进入和离开禁用控件的边界时得到通知。

处理父控件的MouseMove事件如下:

// To avoid the redundant calls...
private bool isMouseEntered;

// `ParentControl` the parent of the disabled control. Form, Panel, GroupBox...
private void ParentControl_MouseMove(object sender, MouseEventArgs e)
{
    // Optional to execute this code only when the control
    // is disabled or invisible.
    if (disabledControl.Enabled && disabledControl.Visible) return;

    if (disabledControl.Bounds.Contains(e.Location))
    {
        if (!isMouseEntered)
        {
            isMouseEntered = true;
            // Call/do here whatever you want...
        }
    }
    else if (isMouseEntered)
    {
        isMouseEntered = false;
        // If you have something to do when the mouse leaves
        // the disabled/invisible control...
    }
}

编辑

  1. 确保您已正确添加父级的 MouseMove 处理程序。使用带有断点的调试器来确认这一点。

  2. 将上述解决方案应用于链接代码:

private bool isMouseEntered;

private void CZUMain_MouseMove(object sender, MouseEventArgs e)
{
    if (triggerDataRefreshStudentPanel.Bounds.Contains(e.Location))
    {
        if (!isMouseEntered)
        {
            isMouseEntered = true;

            if (_connectedUserType == "student")
            {
                actions = StudentsPanel.studentTriggerNewRefresh(_connectedUser, ref _studentLastMeeting, ref _studentLastAssignment, ref _studentLastColleague, ref _studentLastCourse);
                refreshStudentData(actions);
                //
            }
            else
            {
                StudentsPanel.updateTeachedClassesList(selectClassID, ref teachedClassesIDs, connectedUser); // updating Teacher Teached Classes List every time he clicks
            }
        }
    }
    else if (isMouseEntered)
    {
        isMouseEntered = false;
                
        // ...
    }
}