【发布时间】:2016-03-15 08:25:27
【问题描述】:
我正在开发一个 WordSearch 拼图程序(也称为 WordFind),您必须在其中找到大量字母中的某些单词。我正在使用 C# WinForms。
我的问题是当我想单击并按住 1 个字母 (Label),然后拖动到其他字母以更改它们的 ForeColor。我试过谷歌搜索,但无济于事。
这是我所拥有的:
foreach (Letter a in game.GetLetters())
{
this.Controls.Add(a);
a.MouseDown += (s, e2) =>
{
isDown = true;
a.ForeColor = Color.Yellow;
};
a.MouseUp += (s, e2) =>
{
isDown = false;
};
a.MouseHover += (s, e2) =>
{
if (isDown)
a.ForeColor = Color.Yellow;
};
}
但是,除非没有按住鼠标,否则 MouseHover 事件永远不会触发。用MouseEnter 交换MouseHover 也没有运气。所以,我保留了 MouseDown 和 MouseUp 事件,并尝试在表单本身中使用 MouseHover:
private void frmMain_MouseHover(object sender, MouseEventArgs e)
{
if (isDown)
{
foreach (Letter l in game.GetLetters())
if (l.ClientRectangle.Contains(l.PointToClient(Control.MousePosition)))
l.ForeColor = Color.Purple;
}
}
这个事件也没有触发,我不知道为什么它没有触发以及一些替代解决方案是什么。任何建议表示赞赏。
【问题讨论】:
-
您可以使用计时器并检查鼠标按钮是否按下,然后应该执行来自
frmMain_MouseHover的代码。你可以检查这个answer -
很棒的解决方案!跳出框框思考!太棒了!
标签: c# winforms mousehover