Wal*_*hop 5 c# winforms mousehover
我正在开发一个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;
};
}
Run Code Online (Sandbox Code Playgroud)
但是,除非未按住鼠标,否则MouseHover事件永远不会触发.还没有运气换MouseHover用MouseEnter.所以,我保留了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;
}
}
Run Code Online (Sandbox Code Playgroud)
这个事件也没有触发,我不知道为什么它没有解雇,以及一些替代解决方案是什么.任何建议表示赞赏.
您可以使用拖放事件。
AllowDrop为作为放置目标的每个控件设置属性。MouseDown从其开始拖动的每个控件的事件,并在DoDragDrop该控件的处理程序调用事件中设置要拖动的数据。DragEnetr每个拖动目标的事件并设置e.Effect以确定是否允许放置。在这里您可以检查是否允许放置,将背景颜色更改为您想要的颜色。 DragLeave重置背景颜色的句柄。DragDrop并使用GetData方法 ife.Data来获取数据并在放置时执行操作。走过
例子
我有 3 个按钮,按钮 1 和按钮 2,按钮 3 和按钮 2 是放置的目标。在下面的代码中,我将检查按钮 2 上掉落的文本是否是按钮 1 的文本,我将按钮 2 的背景颜色更改为绿色,否则更改为红色。另外,如果您将鼠标拖出按钮2,我会将背景颜色设置为默认值。如果你删除,我将更改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;
}
Run Code Online (Sandbox Code Playgroud)