(Winform)在将其添加为MouseHover事件后,无法单击linklabel

时间:2016-10-17 10:00:28

标签: c# winforms

我有一个PictureBox。我想在鼠标悬停到特定位置时自动添加LinkLabel。一切都很好但我无法点击LinkLabel,因为它无法停止闪烁。这是我的代码:

private void ptbType1_MouseHover(object sender, EventArgs e)
    {            
        PictureBox ptb = sender as PictureBox;
        LinkLabel lkl = new LinkLabel();
        lkl.Text = "Change Image...";
        lkl.Font = new Font(lkl.Font.FontFamily, 10, FontStyle.Regular);
        lkl.BackColor = SystemColors.Window;
        lkl.AutoSize = false; lkl.TextAlign = ContentAlignment.MiddleCenter;
        lkl.Size = new Size(120, 30); lkl.BorderStyle = BorderStyle.FixedSingle;
        lkl.Location = new Point(ptb.Size.Width - 120, 5);
        ptb.Controls.Add(lkl);            
    }

**更新2016年10月18日:使用工具提示来避免gzaxx的LOTS OF linklabel的想法建议我实现另一种方式:现在链接标签已经在图片框上,其Visible属性设置为False。当鼠标悬停在图片框上时,标签显示为可见 - >当鼠标离开时,反之亦然。一切都保持不变:闪烁使其无法点击。当然,图片框上的MouseHover事件就是原因。

有什么想法吗?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。首先创建 A LOT 标签,每次鼠标移动毫米时,都会创建新标签。其次,您不会将事件附加到链接标签,因此单击它不会执行任何操作。我的建议是使用TooltipPictureBox上悬停信息时显示消息"点击更改图片..."并处理点击事件。

// should be called only once
private void AttachClickEvent(PictureBox ptb)
{
    ptb.MouseClick += (s, o) =>
    {
        // open change dialog here
    }
}

这是一个简单的解决方案。

答案 1 :(得分:0)

感谢您的支持,我已经解决了这个问题。关键是

  1. 当鼠标光标进入linklabel时,它巧合地触发了picturebox的MouseLeave_Event => linklabel消失

  2. 随着标签消失,鼠标光标随后进入图片框,因此图片框的MouseHover_Event工作=> linklabel出现

  3. --->永恒的循环 - >眨眼

    我已通过此代码处理它以检查鼠标光标是否在链接标签绑定区域中,链接标签静止不动,只有当光标实际离开图片框时才会消失:

    ...
    filterable do
    User.current
    end
    ...
    

    完成!我在网站上的第一个问题,我自己回答,辉煌:))