C#在父项的MouseHover / MouseLeave上显示/隐藏元素

时间:2009-12-10 13:21:23

标签: c# visible mouseleave mousehover

在C#中,我们有以下内容:

  • 包含UserControl和隐身PictureBox的{​​{1}}。

我想要实现的目标:

  • FlowPanel悬停时 (UserControl),无形的 MouseHover将设置为FlowPanel。当鼠标离开时 visible = true UserControl ,. FlowPanel应设为FlowPanel

visible = false上使用MouseLeave无法完成此任务,因为当鼠标进入UserControl时会触发此事件。当鼠标离开FlowPanel时隐藏FlowPanel,但是有问题(有时会触发FlowPanel,有时不会)。

解决此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

我在我的一个表格上做了类似的事情

在你的第一个活动中做一个if(control.Opacity = 1.0)

private void Form1_MouseLeave(object sender, EventArgs e)
{
   if (this.ClientRectangle.Contains(this.PointToClient(Cursor.Position)))
   {
    this.Opacity = 1.0;
   }
   else
   {
      int loopctr = 0;

      for (loopctr = 100; loopctr >= 5; loopctr -= 10)
      {
        this.Opacity = loopctr / 99.0;
        this.Refresh();
        Thread.Sleep(100);
      }
   }
}

答案 1 :(得分:0)

如果未触发FlowPanel.MouseLeave,则UserControl.MouseLeave未被触发?我想隐藏在这两个事件上可能会有所作为。

答案 2 :(得分:0)

这是一个常见的UI问题。鼠标事件作为样本出现,因此可能会丢失一些像素位置,并且控件不会触发鼠标事件。

当在控件内检测到MouseHover并以固定间隔(例如342ms)轮询光标时,一种不太好用的方法是设置某种形式的Timer。