当鼠标悬停在该特定区域上时,如何为列表中的一个矩形填充不同的颜色?
Posted
技术标签:
【中文标题】当鼠标悬停在该特定区域上时,如何为列表中的一个矩形填充不同的颜色?【英文标题】:How to fill different color for one of my rectangle from my list when the mouse is hover on that particular area? 【发布时间】:2015-11-18 13:36:31 【问题描述】:如果鼠标悬停在矩形区域上,我有矩形列表,我想更改鼠标坐标所在矩形的颜色。我已经这样做了,但是颜色变化不够快。下面的方法选择它是哪个矩形。
void OnMouseMoveOnTheRectangles(MouseEventArgs e)
RectangleF[] allRectangles = new RectangleF[aListDrawings.Count];
aListDrawings.CopyTo(allRectangles);
if (allRectangles.Length == 0)
return;
RectangleF currentSelected = RectangleF.Empty;
foreach (RectangleF rec in allRectangles)
RectangleF current = GetOffsetRectangle(rec);
if (current.Contains(e.Location))
_currentActive = current;
break;
这是我的 RedDraw 函数,你可以调用它
protected virtual void DrawSelection(PaintEventArgs e, RectangleF[] sRegion,
SolidBrush _brush)
if (sRegion.Length == 0)
return;
e.Graphics.SetClip(this.GetInsideViewPort(true));
RectangleF[] offsetRectangles = new RectangleF[sRegion.Length];
int x = 0;
foreach (RectangleF r in sRegion)
offsetRectangles[x] = this.GetOffsetRectangle(r);
x++;
using (Brush brush = _brush)
e.Graphics.FillRectangles(brush, offsetRectangles);
//This is where i color i tried to change the color for that particular rectangle
if (_currentActive != RectangleF.Empty)
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(0x90, Color.Red)),
_currentActive);
using (Pen pen = new Pen(this.SelectionColor))
e.Graphics.DrawRectangles(pen, offsetRectangles);
e.Graphics.ResetClip();
【问题讨论】:
“不够快”如何显示?闪烁?你有多少个长方形?你用什么类型的控件来绘制它们?你使用双缓冲控件吗?您是否通过 MouseMove 中的 Invalidate 从 Paint 中调用重绘?是否检查是否有必要,即当前矩形是否已更改? 旁注:_currentActive
永远不会重置为空矩形。
我没有看到任何代码会在鼠标移动时启动重绘。请提供可靠地重现您的问题的a good, minimal, complete code example。
@taw 速度不可预测。它不闪烁。我可能有多个它是动态的。该控件是基于 Control 类的自定义控件。我不使用双缓冲。是的,我从油漆中调用重绘,但不是通过 mousmove 上的 Invalidate。如果我单击或移动太多,或者我最小化和最大化,当前矩形会发生变化
所以重绘滞后于您的鼠标移动? - 是的,我从油漆中调用重绘,但不是通过 mousmove 上的 Invalidate 来调用那么您何时以及如何触发油漆?
【参考方案1】:
就像@TaW 所说的那样,Invalidate 函数可以解决问题。它将在适当的时间触发 Paint 事件,并且您的图形将被更新。找到无效的任何控制元素都有它。因此,您可以使用画布控件下的 invalidate 方法。
【讨论】:
以上是关于当鼠标悬停在该特定区域上时,如何为列表中的一个矩形填充不同的颜色?的主要内容,如果未能解决你的问题,请参考以下文章