Использование обработчика событий CellPaint с DataGridViewC#

Место общения программистов C#
Ответить
Anonymous
 Использование обработчика событий CellPaint с DataGridView

Сообщение Anonymous »

Идея состоит в том, что я перерисовываю «ячейку» со списком так, чтобы она отображала блок цвета и текста. Это когда форма отображается и вот-вот отобразится раскрывающийся список:
Изображение

После того, как я выбрал цвет, все становится странно:
[img]https://i .sstatic.net/oCyYZ.jpg[/img]

Теперь все не так. Мне нужно навести указатель мыши на элемент управления, чтобы отобразить другие биты. Просто работает неправильно.
Мой обработчик:

Код: Выделить всё

    private void DataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if(e.ColumnIndex == 0 && e.RowIndex > 0)
{
e.PaintBackground(e.ClipBounds, true);
e.PaintContent(e.ClipBounds);

Graphics g = e.Graphics;
Color c = Color.Empty;
string s = "";
Brush br = SystemBrushes.WindowText;
Brush brBack;
Rectangle rDraw;

rDraw = e.ClipBounds;
rDraw.Inflate(-1, -1);

{
brBack = Brushes.White;
g.FillRectangle(brBack, e.ClipBounds);
}

try
{
ComboboxColorItem oColorItem = (ComboboxColorItem)((ComboBox)sender).SelectedItem;
s = oColorItem.ToString();
c = oColorItem.Value;
}
catch
{
s = "red";
c = Color.Red;
}

SolidBrush b = new SolidBrush(c);
Rectangle r = new Rectangle(e.ClipBounds.Left + 5, e.ClipBounds.Top + 3, 10, 10);
g.FillRectangle(b, r);
g.DrawRectangle(Pens.Black, r);
g.DrawString(s, Form.DefaultFont, Brushes.Black, e.ClipBounds.Left + 25, e.ClipBounds.Top + 1);

b.Dispose();
g.Dispose();

e.Handled = true;
}
}
}
Что-то мне не хватает? Должно быть.
Обновление:
Я попробовал это в событии CellPainting:

Код: Выделить всё

if(e.ColumnIndex == 0 && e.RowIndex > 0)
{
using (Graphics g = e.Graphics)
{
g.FillRectangle(Brushes.Aqua, e.CellBounds);
}

}
else
{
e.PaintBackground(e.CellBounds, true);
e.PaintContent(e.CellBounds);
}
e.Handled = true;
Это улучшает ситуацию в том смысле, что все становится не так странно. Конечно, на самом деле это ничего не рисует. Но тогда не требуется много времени, чтобы самые левые ячейки (с символами редактирования) отображались только белым цветом. Так что механика все еще неверна.
Спасибо.
Если я попробую предложенным способом, то в итоге получу:
Изображение
Прогресс достигнут! Можем ли мы настроить его так, чтобы он по-прежнему включал линии сетки? Как в обычных ячейках?
Изображение


Подробнее здесь: https://stackoverflow.com/questions/376 ... tagridview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»