gpt4 book ai didi

c# - 当鼠标按下时 MouseHover 不触发

转载 作者:太空狗 更新时间:2023-10-29 23:29:48 26 4
gpt4 key购买 nike

我正在开发一个 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 事件永远不会触发,除非鼠标没有被按住。将 MouseHoverMouseEnter 交换也没有运气。因此,我保留了 MouseDownMouseUp 事件并尝试在表单本身内使用 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;
}
}

这个事件也没有触发,我不知道为什么它没有触发以及有哪些替代解决方案。任何建议表示赞赏。

最佳答案

您可以使用拖放事件。

  1. 设置AllowDrop作为放置目标的每个控件的属性。
  2. 为以它开始拖动的每个控件处理 MouseDown 事件,并在处理程序调用中处理 DoDragDrop该控件的事件并设置要拖动的数据。
  3. 句柄 DragEnetr拖放各目标事件e.Effect确定是否允许丢弃。在这里您可以检查是否允许掉落,将背景颜色更改为您想要的颜色。
  4. 句柄 DragLeave重置背景颜色。
  5. 汉尔德 DragDrop如果 e.Data,则使用 GetData 方法获取数据并在放置时执行操作。

走过

示例

我有 3 个按钮,button1 和 button2 以及 button3 和 button2 是放置的目标。在下面的代码中,我将检查按钮 2 上的文本是否是按钮 1 的文本,我将按钮 2 的背景颜色更改为绿色,否则为红色。另外,如果您将鼠标拖出 button2,我会将背景颜色设置为默认值。如果你放弃,我将更改 button2 的文本并设置 button1 的文本:

//Start drag for button 2
private void button1_MouseDown(object sender, MouseEventArgs e)
{
this.button1.DoDragDrop(this.button1.Text, DragDropEffects.Copy);
}

//Start drag for button 3
private void button3_MouseDown(object sender, MouseEventArgs e)
{
this.button3.DoDragDrop(this.button3.Text, DragDropEffects.Copy);
}

//Check if drop is allowed and change back color
private void button2_DragEnter(object sender, DragEventArgs e)
{
if(e.Data.GetData(DataFormats.Text).ToString()== button1.Text)
{
e.Effect = DragDropEffects.Copy;
this.button2.BackColor = Color.Green;
}
else
{
e.Effect = DragDropEffects.None;
this.button2.BackColor = Color.Red;
}
}

//Perform drop actions
private void button2_DragDrop(object sender, DragEventArgs e)
{
this.button2.Text = e.Data.GetData(DataFormats.Text).ToString();
}

//Reset back color here
private void button2_DragLeave(object sender, EventArgs e)
{
this.button2.BackColor = SystemColors.Control;
}

关于c# - 当鼠标按下时 MouseHover 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com