回答
您可以使用Mouse Enter Event
linkLabel1.MouseEnter += new EventHandler(linkLabel1_MouseEnter);
private void linkLabel1_MouseEnter(object sender, EventArgs e)
{
MessageBox.Show("Mouse is within link area");
}
我们可以用鼠标悬停吗? –
@SudhakarTillapudi就我所知。它将与鼠标输入有不同的效果。在鼠标悬停。鼠标必须超过控制几秒钟,但鼠标输入立即 – 2013-12-03 18:31:16
这是不正确的。这将告诉你鼠标是否在控制范围内,而不是它是否实际在链路本身。一个例子是,如果您有一个LinkLabel控件停靠在大容器的顶部或底部,并将其左对齐或右对齐,以便控件覆盖整个容器宽度,但其内部的链接不对齐。如果将鼠标光标移动到除文本之外的控件的空白区域,则“MouseEnter”事件仍会触发。 –
这不能做。在撰写本文时,the other answer中建议的MouseEnter
事件将在鼠标进入控制区域时触发,而不管它是否实际上是链接文本。
如果您的LinkLabel
控件的边界相对于其内容较小,那么MouseEnter
事件可能运行得足够好。但是,如果(例如)当鼠标悬停在链接文本上并且文本中的控件周围存在大量区域时,您希望链接改变颜色,则此方法无效。
在一个有点不相干的笔记上,这也可以防止您检测LinkLabel
中的哪个链接目前正在被覆盖,如果您有多个链接,如here所述。
有人想知道更多的细节:LinkLabel.LinkArea
财产不是你正在寻找,要么。这只会确定LinkLabel
中的哪些字符实际上是链接的一部分,而不是它们在屏幕上占用的实际区域。要结束,唯一能够获得所需功能的方法是实现自己的自定义控件,该控件的行为与控件的行为相似,但添加了您的方法和/或属性需要。
由于原来的LinkLabel具有保护功能PointInLink这并不难做到:
using System;
using System.Windows.Forms;
namespace MyControlNameSpace
{
/// <summary>
/// Data for a HoveredLinkChanged-Handler.
/// </summary>
public class HoveredLinkChangedEventArgs : EventArgs
{
private readonly LinkLabel.Link m_Link;
/// <summary>
/// Creates data for a HoveredLinkChanged-Handler
/// </summary>
/// <param name="link">the Link, with the mouse pointer over it</param>
public HoveredLinkChangedEventArgs(LinkLabel.Link link)
{
m_Link = link;
}
/// <summary>
/// Returns the hovered Link
/// </summary>
public LinkLabel.Link HoveredLink
{
get { return m_Link; }
}
}
/// <summary>
/// The structure of a HoveredLinkChanged-Handler
/// </summary>
public delegate void HoveredLinkChangedEventHandler(
object sender, HoveredLinkChangedEventArgs e);
/// <summary>
/// Adds to LinkLabel the possiblity to react on changes
/// of the hovered Link (e.g. to alter a TooltipText).
/// </summary>
public class LinkLabelEx : LinkLabel
{
private Link m_HoveredLink;
/// <summary>
/// Occurs, when another Link is hovered.
/// </summary>
public event HoveredLinkChangedEventHandler HoveredLinkChanged;
/// <summary>
/// Raises the HoveredLinkChanged event
/// </summary>
/// <param name="hoveredLink">the hovered Link</param>
protected virtual void OnHoveredLinkChanged(Link hoveredLink)
{
if (HoveredLinkChanged != null)
HoveredLinkChanged(this,
new HoveredLinkChangedEventArgs(hoveredLink));
}
/// <summary>
/// Raises the Control.OnMouseMove(MouseEventArgs) event.
/// </summary>
/// <param name="e">a MouseEventArgs containing the event data</param>
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
Link currentLink = PointInLink(e.X, e.Y);
if (Equals(currentLink, m_HoveredLink)) return;
m_HoveredLink = currentLink;
OnHoveredLinkChanged(m_HoveredLink);
}
}
}
再就是只有两件事情剩下要做的:
添加事件处理程序到您的LinkLabelEx,如:
linkLabelEx1.HoveredLinkChanged += linkLabelEx1_HoveredLinkChanged;
设置根据EventArgs的给出的链接,例如的ToolTipText:
void linkLabelEx1_HoveredLinkChanged(object sender, HoveredLinkChangedEventArgs e)
{
string ttt = e.Link == null
? string.Empty
: e.Link.Description;
toolTip1.SetToolTip((Control)sender, ttt);
}
- 1. 检测鼠标在iframe上的位置
- 2. 检测鼠标点击位置
- 3. 检测鼠标位置是否在一组位置规则内?
- 4. 检索鼠标位置
- 5. C#XNA鼠标位置
- 6. 鼠标点击位置上的PictureBox未检测到在标签
- 7. wxPython:检测鼠标点击位图
- 8. 使用Java检测鼠标在屏幕上的任意位置
- 9. 鼠标位置()
- 10. 设置鼠标位置不工作c#
- 11. 检测光标位置
- 12. 未正确检索WPF鼠标位置
- 13. 检查屏幕上的鼠标位置
- 14. C#Monogame - 检测鼠标暂停
- 15. C#WinForms trayapp MenuItem鼠标悬停检测
- 16. 如何在循环中检测鼠标在datagrid上的位置?
- 17. 如何检测任意鼠标位置(x,y)上的元素?
- 18. 在Firefox中检测鼠标在Firefox中的位置
- 19. 在matplotlib画布上检测相对鼠标位置
- 20. 如何检测jQuery中的鼠标点击位置
- 21. 鼠标位置并点击sfml中的检测
- 22. 如何让我的组件检测鼠标位置?
- 23. 如何在java中检测鼠标位置
- 24. 打开图层3的鼠标位置检测工作不
- 25. 加载Silverlight窗口后检测鼠标位置
- 26. 如何检测我的鼠标位置是否在矩形c#内?
- 27. 在鼠标位置
- 28. Vb.net鼠标位置
- 29. jQuery鼠标位置
- 30. C#XAML鼠标位置悬停区域
你的意思是鼠标悬停? –
这是winform,asp.net,wpf吗? – 2013-12-03 18:23:42
winform和鼠标在 – williamtroup