我正在使用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事件永远不会触发。也没有运气与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;
}
}
这个事件也不会触发,我不知道为什么它没有解雇,以及一些替代解决方案是什么。任何建议都表示赞赏。
答案 0 :(得分:3)
您可以使用拖放事件。
AllowDrop
属性。MouseDown
事件以及该控件的处理程序调用{{3}}事件并设置要拖动的数据。DoDragDrop
事件并设置DragEnetr
以确定是否允许丢弃。这里是您可以检查是否允许掉落的地方,将背景颜色更改为您想要的颜色。 e.Effect
以重置背景颜色。DragLeave
并使用GetData
方法DragDrop
获取数据并在删除时执行操作。走过
示例强>
我有3个按钮,button1和button2,button3和button2是drop的目标。在下面的代码中,我将检查按钮2上的文本是否是button1的文本,我将按钮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;
}
答案 1 :(得分:0)
您正在寻找各种拖拽事件:
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.dragenter(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.windows.forms.control.dragover(v=vs.110).aspx
等...
您遇到的问题是您正在使用错误的事件来完成您想要完成的任务。