(Winform)当鼠标悬停事件触发时,添加链接标签后不能点击它

本文关键字:标签 链接 添加 不能 Winform 鼠标 悬停 事件 | 更新日期: 2023-09-27 18:13:24

我有一个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的大量链接标签的想法建议我实现另一种方式:链接标签现在已经在图片框上,其可见属性被设置为False。当鼠标悬停在图片框上时,标签显示为Visible -> true,反之亦然。所有这些都是一样的:闪烁使它无法点击。当然,图片框上的鼠标悬停事件是原因。

任何想法?谢谢你的帮助!

(Winform)当鼠标悬停事件触发时,添加链接标签后不能点击它

您的代码有一些问题。首先创建很多标签,每次鼠标移动一毫米,就会创建新的标签。其次,您没有将事件附加到链接标签,因此单击它什么也不做。我的建议是使用Tooltip来显示消息时,悬停在PictureBox的信息"点击更改图像…",并处理点击事件。

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

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

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

  2. 由于标签消失,鼠标光标随之进入图片框,因此图片框的MouseHover_Event work => linklabel出现

->永恒循环->闪烁

我已经处理了这个代码来检查鼠标光标是否在linklabel绑定区域,linklabel静止不动,只有当光标实际离开图片框时才消失:

    private void ptbType1_MouseLeave(object sender, EventArgs e)
    {
        PictureBox ptb = sender as PictureBox;
        LinkLabel lkl = ptb.Controls[0] as LinkLabel;
        if (!lkl.Bounds.Contains(ptb.PointToClient(Cursor.Position)))
        {
           lkl.Visible = false;
        }
    }

完成了!我在网站上的第一个问题,我自己回答了它,很棒:))