Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / datagridview + cellpainting + drawline = нарисованное появляется только после смены фокуса / 4 сообщений из 4, страница 1 из 1
28.11.2014, 03:27
    #38818952
BRS_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datagridview + cellpainting + drawline = нарисованное появляется только после смены фокуса
datagridview + cellpainting + drawline = нарисованное появляется только после смены фокуса ячейки, либо после того как свернешь развернешь форму

а хочется что бы сразу линия отрисовывалась

код для примера:


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            dataGridView1[e.ColumnIndex, e.RowIndex].Tag = "zzzz";
        }

        private void dgv_main_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            if (e.ColumnIndex >= 0 && e.RowIndex >= 0 && 
                dataGridView1[e.ColumnIndex, e.RowIndex].Tag != null &&
                dataGridView1[e.ColumnIndex, e.RowIndex].Tag.ToString() == "zzzz")
            {
                e.PaintBackground(e.ClipBounds, true);

                using (Brush gridBrush = new SolidBrush(System.Drawing.Color.Blue), backColorBrush = new SolidBrush(dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor))
                {
                    using (Pen gridLinePen = new Pen(gridBrush, 2))
                    {
                        e.Graphics.DrawLine(gridLinePen,
                                            e.CellBounds.Left + ((e.CellBounds.Right - e.CellBounds.Left) / 2), e.CellBounds.Top,
                                            e.CellBounds.Left + ((e.CellBounds.Right - e.CellBounds.Left) / 2), e.CellBounds.Top + ((e.CellBounds.Bottom - e.CellBounds.Top) / 3));
                    }
                }
                
                e.Handled = true;
            }
        }




подскажите, пожалуйста, как добиться желаемого?
...
Рейтинг: 0 / 0
28.11.2014, 04:10
    #38818955
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datagridview + cellpainting + drawline = нарисованное появляется только после смены фокуса
BRS_1,
Пробовали вызывать Invalidate?
...
Рейтинг: 0 / 0
28.11.2014, 10:13
    #38819092
BRS_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datagridview + cellpainting + drawline = нарисованное появляется только после смены фокуса
JeStoneBRS_1,
Пробовали вызывать Invalidate?

Благодарю за подсказку, попробовал вызывать Invalidate - обновляется без смены фокуса, но сам грид в области прорисовки линий начал "мерехтеть".
Вызов InvalidateCell(e.ColumnIndex, e.RowIndex) вместо Invalidate ничего не изменил - всё осталось также, линии отрисовываются, но "мерехтят".
...
Рейтинг: 0 / 0
29.11.2014, 15:53
    #38820302
BRS_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
datagridview + cellpainting + drawline = нарисованное появляется только после смены фокуса
Потестил еще - вылезли неудобства:
- При использовании Invalidate перестают отрисовываться остальные контролы на форме.
- Всплывающее окно MessageBox'а выскакивает, но его не видно - в результате вся форма блокируется.

Киньте, пожалуйста, пример рабочего кода по рисованию в CellPainting
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / datagridview + cellpainting + drawline = нарисованное появляется только после смены фокуса / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]