0

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

  • AUserControl包含 aPictureBox和一个不可见的FlowPanel

我想要达到的目标:

  • UserControl悬停 ( MouseHover) 时,不可见 FlowPanel将设置为visible = true。当鼠标离开 UserControl or FlowPanel时, FlowPanel应该设置visible = false

使用MouseLeaveonUserControl不起作用,因为当鼠标进入时会触发此事件FlowPanel。隐藏FlowPanel鼠标离开时FlowPanel会这样做,但是有问题(有时MouseLeave会触发,有时不会)。

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

4

3 回答 3

2

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

在你的第一个事件中做一个 if(contorl.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);
      }
   }
}
于 2009-12-10T13:45:23.003 回答
0

在不触发的情况下FlowPanel.MouseLeave,不UserControl.MouseLeave触发?我想隐藏在这两个事件上可能会奏效。

于 2009-12-10T13:26:37.307 回答
0

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

一种不太好的方法是在控件内检测到 MouseHover 时设置某种形式的 Timer 并定期轮询光标(例如 342 毫秒)。

于 2009-12-10T13:30:49.610 回答