我正在制作一个基于ToolStripButton控件的CustomControl,我试图知道鼠标何时悬停按钮以不同方式绘制它。这是我的代码的快速视图:
private bool m_IsHover = false;
...
protected override void OnMouseEnter(EventArgs e)
{
m_IsHover = true;
Debug.WriteLine("Mouse IN");
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
m_IsHover = false;
Debug.WriteLine("Mouse OUT");
base.OnMouseLeave(e);
}
...
protected override void OnPaint(PaintEventArgs e)
{
// Define rectangle used to draw
Rectangle borderRec = new Rectangle(0, 0, this.Width - 1, this.Height - 1);
if (m_IsHover)
{
// Draw border
e.Graphics.DrawRectangle(m_BorderPen, borderRec);
...
}
else
{
// Default draw
base.OnPaint(e);
}
}
我的问题是我在调试面板中清楚地看到Mouse IN和Mouse OUT是正确的,因此应该正确设置变量,但是在OnPaint事件中,我从不输入m_IsHover conditionnal ...
我真的不明白问题是什么,看起来很容易......
答案 0 :(得分:1)
ToolStripItem.Select()方法在MouseEnter上运行。调用this.Invalidate()强制重绘。