Рисование поверх контролов

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

dart
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.09.2008 (Чт) 3:27

Рисование поверх контролов

Сообщение dart » 20.09.2008 (Сб) 0:50

Здравствуйте уважаемые форумчане.

Вообщем, такая у меня беда. Есть у меня на форме datagridview(многострадальный контрол), на нём я рисую линии. ПРоблемма состоит в том, что когда выделяю ячейки либо начинаю редактировать значения в них, то линии стриаются. Пробовал пихать прорисовку в события вход в ячейки, OnPaint и прочие, но этот вариант не подошёл по причине того, что часть линии в ячейке в которой я ввожу данные всё равно отсутвует. Так же пробовал пихать прорисовку в таймер, но это приводит к тому, что контрол сильно тормозит(очень много приходится прорисовывать линий)..... Может кто подскажет, есть ли какие нибудь свойства у контрола, что то типа AutoRedraw, или что нибудь ещё, что бы линии не стирались ни при каких действиях. Заранее спасибо.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Рисование поверх контролов

Сообщение Viper » 20.09.2008 (Сб) 6:18

OnPaint правильный способ рисования где бы то ни было. Но вот сама идея рисовать на контролах типа DataGridView не очень хороша.
Весь мир матрица, а мы в нем потоки байтов!

dart
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.09.2008 (Чт) 3:27

Re: Рисование поверх контролов

Сообщение dart » 20.09.2008 (Сб) 6:57

Выхода другого нет. Спасибо, будем копать.....

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Рисование поверх контролов

Сообщение MIT » 12.10.2008 (Вс) 13:38

А по моему выход есть, как на счет этого? Вроде бы тоже вариант, посмотри, может понравиться. Правда, код на C#, но думаю это не проблема.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: Рисование поверх контролов

Сообщение EXIS » 12.10.2008 (Вс) 20:19

Попробуй отрисовывать каждую ячейку по отдельности типа так:
Код: Выделить всё
    Private Sub Grid_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles Grid.CellPainting
' отрисовка ячеек заголовка
        If e.RowIndex = -1 Then
            e.Graphics.FillRectangle(Brushes.White, e.CellBounds)
            Dim T1 As New Point(100, 0)
            Dim T2 As New Point(100, 40)
            Dim GradBrush As New System.Drawing.Drawing2D.LinearGradientBrush(T1, T2, Color.LightGray, Color.White)
            e.Graphics.FillRectangle(GradBrush, e.CellBounds)
            e.Paint(e.ClipBounds, (DataGridViewPaintParts.ContentForeground))
            e.Handled = True
        End If

' отрисовка простых ячеек
        If e.RowIndex > -1 Then
            e.Graphics.Clip = New Region(e.CellBounds)
            e.Graphics.FillRectangle(Brushes.White, e.CellBounds)
            e.Graphics.DrawImage(TableImage, 0, e.CellBounds.Top)
            e.Paint(e.ClipBounds, (DataGridViewPaintParts.All - DataGridViewPaintParts.Background))
            e.Handled = True
        End If

    End Sub


Рисуется нормально и ничего не мелькает.
Функция e.Paint отрисовывает составляющие ячейки бэкграунд, содержимое, фокус... вообщем комбинируй как надо.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 99

    TopList