【发布时间】:2017-12-16 18:56:16
【问题描述】:
我尝试实现以下目标: 按下鼠标时->如果鼠标进入面板,颜色会改变 当鼠标向上时 -> 面板不会在鼠标进入时改变。
--问题:当鼠标按下时,鼠标进入事件没有反应
我该如何解决这个问题?
//for all panels in the menu
private void walletpanel0_MouseEnter(object sender, EventArgs e)
{
if ( mouseDown && previousPanel != (Panel)sender)
{
Panel p = (Panel)sender;
p.BackColor = Color.FromArgb(255, 26, 41, 56);
previousPanel.BackColor = Color.FromArgb(255, 44, 62, 73);
previousPanel = p;
}
}
private void walletpanel0_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
//to select the panel when clicked on it
if (previousPanel != (Panel)sender)
{
Panel p = (Panel)sender;
p.BackColor = Color.FromArgb(255, 26, 41, 56);
previousPanel.BackColor = Color.FromArgb(255, 44, 62, 73);
previousPanel = p;
}
}
【问题讨论】:
-
当您在 mousedown 事件中放置断点时,它会触发
MouseDown Event吗? -
MouseEnter 总是触发 before MouseDown。由于 MouseDown 将 Capture 属性设置为 true,因此之后无法触发。使用 MouseMove,由于捕获,它也会在您悬停不同的面板时触发。使用 GetChildAtPoint() 获取对面板的引用。并使用 MouseCaptureChanged 事件来检测它是否被中断。
-
当我在函数 no@MethodMan 中放置断点时,它不会触发 'MouseDown' 事件
-
当鼠标按下时,
MouseMove事件也会冻结。我试过了,并阅读了微软的帖子。因此,通过使用MouseCaptureChanged事件的解决方案,我可以检测到捕获状态。虽然,当鼠标按下时,我仍然无法使用MouseMove事件,因为鼠标仍然按下。我尝试使用ReleaseMouseCapture()function,但显然不适用于面板。@HansPassant
标签: c# winforms visual-studio mouseevent