控制移动后,Windows窗体MouseEnter未触发

时间:2015-09-14 08:02:07

标签: c# windows forms winforms mouseenter

我希望在鼠标输入时为BackColor的{​​{1}}属性着色。

PictureBox事件触发时,我将BackColor变为黄色,并在MouseEnter重置为透明。

然后,当我点击MouseLeave时,我会更改其位置,因此我还有一个PictureBox事件会将其重置为透明。

问题是,一旦我移动它,我需要用鼠标输入Move两次来激活MouseEnter事件!

这是一个非常图形化的问题,所以我上传了一点video来向您展示正在发生的事情,它肯定会比我更好地解释我的问题。

我尝试了另一种方法,改变颜色不在PictureBox但在MouseEnter。在这种情况下,它运行良好,除了我在触发Move事件之前有500ms的延迟,这显然不是我想要的。

我现在没有可行的解决方案。

对于代码,它非常简单,目前我有:

MouseHover

在Designer.cs中,每个PictureBox的事件都是:

private void pictureBoxMouseUp(object sender, MouseEventArgs e)
{
    // I move the PictureBox here
}
 
private void pictureBoxMove(object sender, EventArgs e)
{
    (sender as PictureBox).BackColor = Color.Transparent;
}
 
private void pictureBoxMouseEnter(object sender, MouseEventArgs e)
{
    (sender as PictureBox).BackColor = Color.LightYellow;
}
 
private void pictureBoxMouseLeave(object sender, MouseEventArgs e)
{
    (sender as PictureBox).BackColor = Color.Transparent;
}

编辑:要回答我的问题,这是我现在使用的代码:(评论是法语)

this.pictureBox2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBoxMouseDown);
this.pictureBox2.MouseEnter += new System.EventHandler(this.pictureBoxMouseEnter);
this.pictureBox2.MouseLeave += new System.EventHandler(this.pictureBoxMouseLeave);
this.pictureBox2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBoxMouseUp);
this.pictureBox2.Move += new System.EventHandler(this.pictureBoxMove);

我使用与以前相同的方法,并且由于未知原因,现在它可以工作。 感谢各位帮助我:)

2 个答案:

答案 0 :(得分:4)

问题是当您重新定位foreach (DataRow dr in ds.Tables[0].Rows) { var Total = Convert.ToInt32(Convert.ToDouble(dr["Total"])); var Present = Convert.ToInt32(Convert.ToDouble(dr["Present"])); dr["Present%"] = (Present * 100) / Total; } 时,它将不会收到鼠标离开事件。也许您已经注意到了,这也是您在PictureBox事件中设置BackColor的原因。

移动控件后,只有在您再次将鼠标移开并再次打开后,再次将鼠标悬停时,它才会收到第二个Move

尝试手动发送鼠标离开事件(我还没有测试过):

MouseEnter

答案 1 :(得分:1)

我会避免移动PictureBox。很明显,你的错误来自于此。

移动组件时,鼠标不再显示,但状态不会更新。

你可以在the windows form reference code深入游泳,或者你可以说你有 N 小预览(底线上的图片)和一个大预览(上一个)。

创建N + 1图片框,不要更改它。只需更改他们的image property

点击小预览后,使用大预览切换它的图像属性。

此外,建议使用MVC pattern