Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28

Создание таблицы, заполняемой разными (четырьмя) цветами.

26.11.2011, 00:16. Показов 1752. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, с помощью какого элемента (элементов) создавать похожую на предоставленую во вложении табличку?
Миниатюры
Создание таблицы, заполняемой разными (четырьмя) цветами.  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2011, 00:16
Ответы с готовыми решениями:

Выделение элементов ListBox разными цветами в зависимости от содержания каждого
Добрый день! Создаю программу для удобного чтения лог файла, файл формата .log который переносится в ListBox программы WPF. В лог файле...

Нужно чтобы текст в консоли переливался разными цветами
Подскажите как это сделать

В случае наследования от данного класса других классов, строки выводить разными цветами
Используя Visual Studio, создайте проект по шаблону Console Application. Требуется: Создайте класс Printer. В теле класса...

13
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,821
26.11.2011, 00:36
Свой компонент создай, рисуется элементарно.
0
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28
26.11.2011, 00:40  [ТС]
Это форум для начинающих... Опиши как, или дай ссылочку на статью, пожалуйста.

P.S. мне нужно, чтобы цвета менялись по клику.

просто DataGrig не покатит?

 Комментарий модератора 
Это не форум для начинающих. Вы создали тему в разделе C#.NET. Для начинающих свой раздел.
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
26.11.2011, 11:19
DataGridView хватит с головой в общем-то...

Кидаем на форму DataGridView, а затем в событиии загрузки формы делаем следующее:

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
        private enum State
        {
            Full,
            Stop,
            Limit,
            OutOnly,
            Min = Full,
            Max = OutOnly
        }
        Dictionary<State, SolidBrush> states = new Dictionary<State, SolidBrush>();
 
        private void Form1_Load(object sender, EventArgs e)
        {
            states.Add(State.Full, new SolidBrush(Color.Green));
            states.Add(State.Limit, new SolidBrush(Color.LightGreen));
            states.Add(State.OutOnly, new SolidBrush(Color.LightCoral));
            states.Add(State.Stop, new SolidBrush(Color.White));
            dataGridView1.ReadOnly = true;
            dataGridView1.ColumnHeadersVisible = false;
            dataGridView1.RowHeadersVisible = false;
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.AllowUserToDeleteRows = false;
            dataGridView1.AllowUserToOrderColumns = false;
            dataGridView1.AllowUserToResizeColumns = false;
            dataGridView1.AllowUserToResizeRows = false;
            for (int i = 0; i < 24; i++)
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Width = 20 });
            dataGridView1.Rows.Add(9);
            dataGridView1.CellPainting += new DataGridViewCellPaintingEventHandler(dataGridView1_CellPainting);
            dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
            foreach (DataGridViewRow row in dataGridView1.Rows)
                foreach (DataGridViewCell cell in row.Cells)
                    cell.Tag = State.Full;
        }
 
        void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var cell = dataGridView1[e.ColumnIndex, e.RowIndex];
            if (cell.Tag is State)
            {
                if (((State)cell.Tag) == State.Max)
                    cell.Tag = State.Min;
                else
                    cell.Tag = (State)(((int)cell.Tag) + 1);
                dataGridView1.InvalidateCell(e.ColumnIndex, e.RowIndex);
            }
        }
 
        Pen borderPen = new Pen(Color.Black);
        void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            var st = dataGridView1[e.ColumnIndex, e.RowIndex].Tag;
            if (st is State)
            {
                e.Graphics.FillRectangle(states[(State)st], e.CellBounds);
                e.Graphics.DrawRectangle(borderPen, e.CellBounds);
                e.Handled = true;
            }
        }
1
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28
27.11.2011, 12:35  [ТС]
SpawnDDR, все бы хорошо, да красит он только одним цветом
(изначально заполняется зеленым) красит в светло-зеленый, или отменяет его, и всё. остальные цвета ни-ни.
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
27.11.2011, 13:00
Вы пример в точности скопировали или что-то всё-таки редактировали?

В архиве тестовый пример, собран под .NET Framework 3.5
В общем-то могу пересобрать под любой другой, включая 4.5, если надо.
Вложения
Тип файла: zip SourcesTests.zip (5.3 Кб, 12 просмотров)
0
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28
27.11.2011, 13:05  [ТС]
я не понимаю почему у меня так
но dataGridView1_CellClick выполняется дважды, хотя клик один, и не зависимо от того, что я там пишу
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
27.11.2011, 13:16
Скорее всего Вы подписали на событие CellClick дважды.
Обратите внимание, что я подписываюсь на это событие в коде:
Code
1
dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
Вы же, судя по всему, ещё раз подписались на него в дизайнере.
0
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28
27.11.2011, 13:50  [ТС]
теперь все работает, спасибо

Добавлено через 29 минут
А каким еще элементом, помимо DataGridView можно подобное создавать?
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
27.11.2011, 14:07
Можно взять обычную панельку и накидать туда даже обычные Control.
Я когда подходил к данному вопросу, писал свой компонент, наследованный от базового Control. всё остальное было отрисовкой и соответствующей обработкой событий. Реализаций можно сделать много, вопрос в том, что именно не устраивает в текущем, или что вообще хочется сделать/добиться/научиться.
0
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28
27.11.2011, 14:09  [ТС]
Хочется научиться делать в своей программе полноценное расписание, подобное данному, с учетом всех его возможностей (предоставленного расписания).
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
27.11.2011, 14:13
С точки зрения отображения, реализация и через DataGridView нормальная. С точки зрения использования ресурсов, наверное, самая ненормальная, так как этот элемент управления тащит за собой довольно много всего, чего в итоге не используется.
К текущему "расписанию" нужно добавить разве что сохранение/загрузку.
0
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28
27.11.2011, 14:20  [ТС]
Для экономии ресурсов нужно создавать свой Control, так?
ну, с сохранением/загрузкой я разберусь.

Добавлено через 3 минуты
и еще вопрос...
как сделать "затемнение", при наведении на конкретную ячейку?
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
27.11.2011, 14:27
Да, свой Control, ну или чей-то готовый Товарищи из мюТоррента не на C#, конечно, пишут, но всё же
Отлавливать CellMouseMove, а там уж что-то делать с цветом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2011, 14:27
Помогаю со студенческими работами здесь

Создать программу, которая рандомно расставляет точки на форме и начинает их соединять линиями с разными цветами
Создать программу, которая рандомно расставляет точки на форме и начинает их соединять линиями с разными цветами. Реализовать 5 разных...

Вывести значения переменных разными цветами
Здравствуйте! Возникла небольшая проблема с оформлением, хочу что бы каждая переменная имела свой текст когда она выводится на экран для...

Обработка звука: оконное преобразование Фурье и вывод разными цветами
Ребят,помогите пожалуйста!!! Программирование только началось, а задания как-то нужно делать.Кучу книг перечитала. В общем дали задание в...

При ведении курсора карандаш должен оставлять след разными цветами
При ведении курсора карандаш должен оставлять след разными цветами

Выделить разными цветами границы таблицы
Темный красный цвет рамки снизу и справа, светлый красный цвет рамки сверху и слева Сделал таблицу, а как сделать рамки этой таблицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru