【问题标题】:(Winform) Cannot click the linklabel after adding it as MouseHover event fired(Winform)将其添加为触发鼠标悬停事件后无法单击链接标签
【发布时间】:2016-10-17 10:00:28
【问题描述】:

我有一个图片框。当鼠标悬停在特定位置时,我想在特定位置自动添加 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 使用工具提示来避免大量链接标签的想法建议我实现另一种方式:链接标签现在已经在图片框上,其 Visible 属性设置为 False。当鼠标悬停在图片框上时,标签显示为 Visible -> true,当鼠标离开时,反之亦然。一切都保持不变:闪烁使其无法单击。图片框上的 MouseHover 事件当然是原因。

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

【问题讨论】:

  • 可以展示一下你的LinkLabel点击功能吗?
  • 其实我并没有在LinkLabel中添加点击事件,但问题是无法点击!当鼠标光标进入其边界时它会密集闪烁

标签: c# winforms


【解决方案1】:

您的代码有一些问题。首先,您创建 A LOT 的标签,每次鼠标移动毫米时,都会创建新标签。其次,您没有将事件附加到链接标签,因此单击它什么也不做。我的建议是使用Tooltip 在将鼠标悬停在PictureBox 上时显示消息,其中包含“单击以更改图像...”信息并处理单击事件。

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

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

【讨论】:

  • 有什么方法可以在 MouseHover 事件中使用 LinkLabel 吗?问题是当鼠标光标进入 LinkLabel 时,它会密集闪烁,可以点击 :(
【解决方案2】:

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

  1. 鼠标光标进入链接标签时,碰巧触发了图片框的MouseLeave_Event =>链接标签消失

  2. 随着label消失,鼠标光标进入picturebox,所以picturebox工作的MouseHover_Event => 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;
        }
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2013-06-07
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    相关资源
    最近更新 更多