gpt4 book ai didi

背景面板的 C# 鼠标悬停事件

转载 作者:行者123 更新时间:2023-11-30 20:38:18 25 4
gpt4 key购买 nike

我正在制作一个 Windows 窗体,但我无法让鼠标悬停事件按我想要的方式工作。我在 1 个大面板内组合了 50 个小面板。我想在用户将鼠标悬停在一个小面板上时弹出信息。

我没有为每个小面板制作一个鼠标悬停事件,而是试图为大面板制作一个鼠标悬停事件。每当用户将鼠标悬停在大面板内的任何位置时,我的代码将确定他们是否悬停在一个小面板内,如果是,它将识别小面板并显示相关信息。

但是,我发现如果我将鼠标悬停在一个小面板上,大面板鼠标悬停事件不会触发,因为它在技术上位于小面板边界内和大面板边界之外(有点像莱索托是它自己的国家,即使它在南非境内)。

有什么办法解决这个问题吗?

enter image description here

最佳答案

最简洁的解决方案是实现您自己的 LittlePanel 控件:

public class LittlePanel : Panel
{
public class HoverEventArgs
{
public bool Active { get; set; }

public HoverEventArgs(bool active)
{
Active = active;
}
}

public event EventHandler<HoverEventArgs> Hover;

protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
OnHover(true);
}

protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
OnHover(false);
}

protected void OnHover(bool active)
{
EventHandler<HoverEventArgs> hover = Hover;
if (hover != null) hover(this, new HoverEventArgs(active));
}
}

然后订阅“大”Panel 中所有 LittlePanels 引发的 Hover 事件:

foreach (Control control in bigPanel.Controls)
{
if (control is LittlePanel)
{
((LittlePanel)control).Hover += littlePanel_Hover;
}
}

使用共享事件处理程序:

void littlePanel_Hover(object sender, LittlePanel.HoverEventArgs e)
{
// Your code goes here...
}

您还可以考虑向 LittlePanel 控件添加共享功能,例如包含的标签、

关于背景面板的 C# 鼠标悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35304033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com