powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как рисовать в ячейке DataGridView?
19 сообщений из 19, страница 1 из 1
Как рисовать в ячейке DataGridView?
    #39126375
Хочу нарисовать закрашенный квадратик в ячейке Cell элемента DataGridView по событию CellPainting. Проблема в том, что Graphics ячейки рисует рисовальню в самом низу, за фоном ячейки. А как поверх? Подскажите. Вот код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            if (e.RowIndex == 1 & e.ColumnIndex == 1)
            {
                Graphics g = e.Graphics;
                Rectangle r0 = e.CellBounds;
                Point p0 = r0.Location;
                Point p1 = new Point(p0.X + 2, p0.Y + 2);
                g.FillRectangle(Brushes.Black, new Rectangle(p1, new Size(10, 10)));
                MessageBox.Show("нарисовалось");//но потом фоном ячейки закрылось
            }
        }
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39126404
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решетка,
отнаследоваться от DataGridViewTextBoxCell и перекрыть
Код: c#
1.
2.
3.
4.
5.
6.
  protected override void Paint(Graphics graphics, Rectangle clipBounds,
            Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState,
            object value, object formattedValue, string errorText,
            DataGridViewCellStyle cellStyle,
            DataGridViewAdvancedBorderStyle advancedBorderStyle,
            DataGridViewPaintParts paintParts)


рисуй что хочешь
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39126496
Где-то в степи,

извини но я не понял. Можно подробно? Допустим я создал класс "наследник" и что дальше? Создаю его экземпляр, на экземпляре рисую используя объект Graphics из родной таблицы как-то? Не знаю. Вот например написал
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class наследник : DataGridViewTextBoxCell
    {
        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
        {
            base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);

        }
    }


И что с этим делать? Здесь protected, это не public и он где угодно не виден. В общем по-подробнее для тупых
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39126502
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решетка,
ну что делать, давай порассуждаем, что бы нарисовать что то надо в камеру передать какие то данные снаружи, то есть все говно
что ты задумал инкапсулироать в этого наследника, на свет вытащить свойство или метод ( в принципе однохуйственно) что бы запилить из кода снаружи, можно явно можно в виде интерфейса.
Что бы твое изделие №2 прижилось в таблице можно создать тип колонки для твоего изделия:
отнаследоваться от DataGridViewTextBoxColumn и перекрыть свойство DataGridViewCell которое будет возвращать твоего уродца
и все.... при желании можешь писать туда текст, вставлять с ним картинки или рисовать.., поищи в гугле,этого добра как грязи..
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39126510
Где-то в степи,

Вот самая примитивная заготовка проекта с таблицей (см. приложение). Можешь вписать прямо в нее работающий вариант рисования в ячейке? Трудно понять работу колеса на словах. Проще дать мне работающее колесо, я его увижу, пощупаю, разберу и такое же сделаю.
Насчет в гугле поискать, мне даже с msdn трудно работать.
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39126523
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решетка,

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
 public partial class Form1 : Form
    {
     
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        { 
            Action<Graphics, Rectangle> action = (graphics, rectangle) => graphics.FillRectangle(Brushes.Red, rectangle); 
            
            dataGridView1.Columns.Add(new MyColumn());
            dataGridView1.Rows.Add(new object[] {null});
            dataGridView1.Rows.Add(new object[] { "er" });
            dataGridView1.Rows.Add(new object[] { "er" });
            ((MyCell) dataGridView1.Rows[0].Cells[0]).Action = action;
        }
    }
    class MyCell : DataGridViewTextBoxCell
    {
        public Action<Graphics, Rectangle> Action
        {
            get;
            set;
        }
        
        protected override void Paint(Graphics graphics, 
            Rectangle clipBounds,
            Rectangle cellBounds,
            int rowIndex, 
            DataGridViewElementStates cellState, 
            object value, object formattedValue,
            string errorText, 
            DataGridViewCellStyle cellStyle,
            DataGridViewAdvancedBorderStyle advancedBorderStyle, 
            DataGridViewPaintParts paintParts)
        {
            if (Action != null)
            {
                Action(graphics, cellBounds);
            }
            else
            {
              base.Paint(graphics, 
                  clipBounds,
                  cellBounds, 
                  rowIndex,
                  cellState, 
                  value,
                  formattedValue,
                  errorText, 
                  cellStyle,
                  advancedBorderStyle, 
                  paintParts);
            }
        }
    }

    internal class MyColumn : DataGridViewTextBoxColumn
    {
        private MyCell _cell;
        public MyColumn()
        {
            _cell = new MyCell();
        }

        public override sealed DataGridViewCell CellTemplate
        {
            get { return _cell; }
            set { _cell = (MyCell) value; }
        }
    }


...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39126544
Где-то в степи,

Попробовал нарисовать нужный маленький квадрат с отступом от краев clipBounds ячейки. Почему-то делегат Action вызывается несколько раз, хотя должен только для ячейки [0][0]. И вместо аккуратного рисунка в одной ячейке выходит клякса. В методе Paint моего наследника MyCell пишу такое:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
if (Action != null & RowIndex == 0 & ColumnIndex == 0)
                {
                    Size z1 = new Size(1, 1);
                    //MessageBox.Show("высота" + clipBounds.Height);
                    if (clipBounds.Height > 8) z1 = new Size(clipBounds.Height - 8, clipBounds.Height - 8);
                    Point p1 = new Point(clipBounds.Location.X + 4, clipBounds.Location.Y + 4);
                    Rectangle r1 = new Rectangle(p1, z1);
                    Action(graphics, r1);
                }


Хочу объяснить зачем это нужно. Есть таблица свойств объектов, и одно из свойств, одна колонка, это цвет объекта. Просто выводить в ячейку текст с именем цвета это не интересно, хотелось еще и дорисовывать квадратик этого цвета. Вроде простое естественное желание. И даже событие CellPainting предусмотрено. Странно, что CellPainting рисует за фоном ячейки. Тогда вообще зачем он нужен, атавизм что ли? Все равно что делать узор на изнаночной стороне.
Наверное, в этой ситуации проще не городить наследников, а просто перед столбцом с именами цветов, сделать небольшой фиктивный столбец с ячейками с соответствующим цветом фона. Благо назначить цвет фона ячейки это не высшая математика. Дешево и просто.
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39126617
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решетка,

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
 public partial class Form1 : Form
    {
     
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
            dataGridView1.Columns.Add(new MyColumn());
            dataGridView1.Rows.Add(new object[] {null});
            dataGridView1.Rows.Add(new object[] { "er" });
            dataGridView1.Rows.Add(new object[] { "er" });
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Action<Graphics, Rectangle> action = (graphics, rectangle) =>
                                               {
                                                   Size z1 = new Size(1, 1);
                                                   //MessageBox.Show("высота" + clipBounds.Height);
                                                   if (rectangle.Height > 8) z1 = new Size(rectangle.Height - 8, rectangle.Height - 8);
                                                   Point p1 = new Point(rectangle.Location.X + 4, rectangle.Location.Y + 4);
                                                   Rectangle r1 = new Rectangle(p1, z1);
                                                   graphics.FillRectangle(Brushes.Red, r1);
                                               };
            dataGridView1.Rows[0].Cells[0].Value = "         красный";
            ((MyCell) dataGridView1.Rows[0].Cells[0]).Action = action;
            dataGridView1.Refresh();

        }
    }
    class MyCell : DataGridViewTextBoxCell
    {
        public Action<Graphics, Rectangle> Action
        {
            get;
            set;
        }
        
        protected override void Paint(Graphics graphics, 
            Rectangle clipBounds,
            Rectangle cellBounds,
            int rowIndex, 
            DataGridViewElementStates cellState, 
            object value, object formattedValue,
            string errorText, 
            DataGridViewCellStyle cellStyle,
            DataGridViewAdvancedBorderStyle advancedBorderStyle, 
            DataGridViewPaintParts paintParts)
        { 
            
            base.Paint(graphics, 
                  clipBounds,
                  cellBounds, 
                  rowIndex,
                  cellState, 
                  value,
                  formattedValue,
                  errorText, 
                  cellStyle,
                  advancedBorderStyle, 
                  paintParts);
            if (Action != null)
            {
                Action(graphics, cellBounds);
            }
        
        }
    

    }

    internal class MyColumn : DataGridViewTextBoxColumn
    {
        private MyCell _cell;
        public MyColumn()
        {
            _cell = new MyCell();
        }

        public override sealed DataGridViewCell CellTemplate
        {
            get { return _cell; }
            set { _cell = (MyCell) value; }
        }
    }


...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39127935
Где-то в степи,

Теперь заработало. Вопрос для саморазвития: делегат Action - насколько это фундаментальная вещь? Пока не очень понимаю зачем он и где и как используется. Можно ли было без него реализовать.
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39128006
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решеткаМожно ли было без него реализовать.
можно
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39128018
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решетка,
авторхотелось еще и дорисовывать квадратик этого цвета. Вроде простое естественное желание
это противоестественное желание, я бы сказал отклонение, - гейропой попахивает.
Ебашить нужно в чернобелых иксово - консольных тонах.
Что до делегатов, это фундаментальное понятие языка, и куда вы будете с этим пробелом двигать?
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39128209
Где-то в степибашить нужно в чернобелых иксово - консольных тонах
в любой CAD-программе объекты разных цветов. Даже светофор и то зеленый. Значки пожарки и эвакуации, да хоть не знаю. На аккумуляторе клеммы красная и черная. В черно-белых жестковато, тогда зачем нам цветное зрение от природы?
Где-то в степиЧто до делегатов, это фундаментальное понятие языка
да, но как-то я привык делегатствовать наследоваться перекрывать только в собственных объектах, а то что зашито в System хочется использовать "как есть". И этот делегат, Action, не знаю, как будто универсальный какой-то и у любого object есть. Только вот зачем.
Да, хочу сказать еще о цветах. Изополя напряжений - комментировать лишне.
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39128500
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решеткаИ этот делегат, Action, не знаю, как будто универсальный какой-то и у любого object есть.
код смотрите внимательно - откуда он берётся.
в MyCell (который наследник DataGridViewTextBoxCell) просто добавлено свойство с именем Action

Изучающий си решеткада, но как-то я привык делегатствовать наследоваться перекрывать только в собственных объектах, а то что зашито в System хочется использовать "как есть".
Что за предрассудки? Отвыкайте.
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39128608
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решетка,
нет уж любезный, не знаю как у Вас, а у нас делегат - друг человека, я не удивлюсь, если выяснится, что и интерфейсы чужды для вас как и делегаты, до кучи лямбды и деревья выражений, и что мы имеем в остатке? прикрывать привычкой: "но как-то я привык делегатствовать" свои пробелы в знаниях неприлично, уж извольте взять умные книжки и читать их до дыр, восполняя знания в базовых пределах.
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39128898
Где-то в степи,

да, это так. Ни разу не использовал переменную типа интерфейса. Деревья выражений - это цепочки вызовов? Тогда тоже не использовал. Единственный случай использования мной делегата - это простановка с помощью переменной типа делегата пределов в 2-х 3-х мерном цикле. Например квадрат обходится x от 1 до 5 y от 1 до 5, а треугольник y от 1 до 5-x. И чтобы не пробивать кучу if, я тогда сделал делегат на предельное значение цикла. Но потом сделал лучше, сделал класс Фигура, а Квадрат и Треугольник как наследники со своими методами проходки.
Самую умную книгу прочитал - это Шилдт C# 4.0. Но многое из того прочитал, и думаю а зачем оно? И не использую. Например рефлексия.
Какие еще умные книги посоветуете?
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39129063
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

Что ты прикопался, ясно же сказано: " Изучающий си решетка".
Вот как сменит ник на " Изучивший си решетка".....
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39129174
Shocker.Pro,

моя учительница по литературе говорила, "так ты учил или выучил ???"
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39129234
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучающий си решеткамоя учительница по литературе говорила, "так ты учил или выучил ???"

мучил
...
Рейтинг: 0 / 0
Как рисовать в ячейке DataGridView?
    #39129272
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИзучающий си решеткамоя учительница по литературе говорила, "так ты учил или выучил ???"

мучил
медицина - бессильна
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как рисовать в ячейке DataGridView?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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