Изменить код перекрестия мыши, чтобы он был в верхней части формы? - PullRequest
2 голосов
/ 24 августа 2010

На пустом winform код может быть добавлен, чтобы показать линии, которые пересекаются (перекрестие) по указателю мыши. Проблема в том, что линии не отображаются (или частично скрыты) элементами управления на форме (т. Е. Listview, splitcontainer, кнопками).

Как бы я изменил приведенный ниже код, чтобы он отображался поверх всех элементов управления, представленных в форме?

int lastX = 0;
int lastY = 0;
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Region r = new Region();
r.Union(new Rectangle(0, lastY, this.Width, 1));
r.Union(new Rectangle(lastX, 0, 1, this.Height));
this.Invalidate(r);
this.Update();
Graphics g = Graphics.FromHwnd(this.Handle);

g.DrawLine(Pens.Chocolate, 0, e.Y, this.Width, e.Y);
g.DrawLine(Pens.Chocolate, e.X, 0, e.X, this.Height);
lastX = e.X;
lastY = e.Y;
}

private void Form1_MouseLeave(object sender, EventArgs e)
{
this.Invalidate();
}

Ответы [ 4 ]

1 голос
/ 24 августа 2010

Вам нужно прозрачное окно поверх всех остальных элементов управления. Единственный способ получить его - перекрыть форму другой формой, сделать ее прозрачной с помощью свойства TranparencyKey. Пример кода для этого вы найдете в моем ответе в этой теме .

0 голосов
/ 24 августа 2010

Перечислите нужные элементы управления и вызовите на них функцию .BringToFront();.

listBox1.BringToFront();
0 голосов
/ 24 августа 2010

Согласно документации, объект региона должен быть в мировых координатах, вы передаете в клиентских координатах.Используйте Control.PointToScreen, чтобы отобразить верхнюю левую координату прямоугольников в мировое пространство.

Я также хотел бы отложить рисование на метод OnPaint.

0 голосов
/ 24 августа 2010

Пожалуйста, попробуйте сначала отправить обратно (Control.SendToBack ()) элементы управления в форме (т.е. просмотр списка, splitcontainer, кнопки).Поместите это в событие FormLoad.Я экспериментировал с тем же кошмаром с приложением Windows MDI.Надеюсь, это поможет,

...