У меня есть список прямоугольников, если мышь наведите указатель мыши на область прямоугольников, на которой я хочу изменить цвет прямоугольника, координата мыши которого включена. Я сделал это, но цвет не настолько быстр, чтобы меняться. Следующий метод выбирает, какой прямоугольник он есть.Как заполнить другой цвет для одного из моих прямоугольников из моего списка, когда мышь наводится на эту конкретную область?
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();
}
Как выглядит «недостаточно быстро»? Мерцание? Сколько прямоугольников у вас есть? На какой тип управления вы их рисуете? Вы используете элемент управления DoubleBuffered? Вы вызываете перерисовку из Paint с помощью Invalidate из MouseMove? Вы проверяете, необходимо ли это, т. Е. Изменился ли текущий прямоугольник? – TaW
Боковое примечание: '_currentActive' никогда не возвращается к пустому прямоугольнику. – LarsTech
Я не вижу здесь никакого кода, который бы инициировал перерисовку при перемещении мыши. Пожалуйста, предоставьте [хороший, _minimal_, _complete_ пример кода] (http://stackoverflow.com/help/mcve), который надежно воспроизводит вашу проблему. –