Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19

Вывод списка на экран с возможностью раскрытия одного из пунктов списка

06.06.2015, 21:47. Показов 5018. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По разному пытался сформулировать вопрос, но гугл так и не дал мне даже близко чего-то подходящего.

Суть такова, что на экран выводится список проектов (названия) и выводятся какие-то определённые параметры для каждого проекта. И при необходимости, если клацнуть курсором мыши на одном из проектов, проект должен развернуться и появиться подробное описание. Список проектов большой и они постоянно должны добавляться новые в верх списка.

Если бы не нужно было подробное описание, а были лишь название и ещё какие-то данные, которые можно вывести просто в отдельные столбцы таблицы, то я бы воспользовался gridview. Но в моём случае надо видимо что-то более сложное.

Может быть даже подошёл бы и RichTextBox, если бы там можно было как-то сворачивать/разворачивать ненужные части текста.

Ниже пример. Список проектов, и один из них раскрыт более подробно. Подскажите как такое реализовать? Какой контрол поможет это сделать?

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2015, 21:47
Ответы с готовыми решениями:

Выбор нескольких пунктов списка и вывод выбранных значений на экран
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html...

Создание списка, печать списка на экран, добавления элемента в начало списка, конец списка
Построить динамическую структуру типа список . Необходимо реализовать следующие процедуры: 1. создание списка. 2. печать списка на...

Добавление div'a при выборе одного из пунктов выпадающего списка
Ребята, подскажите пожалуйста, как сделать так, чтоб при выборе первого пункта (option) из выпадающего списка (select) все оставалось так...

8
 Аватар для Adadjio
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
07.06.2015, 00:20
Можно поступить следующим образом. На форму кидаем tableLayoutPanel и удаляем лишний столбец, далее в первую строку добавляем splitContainer и в настройках задаем свойству Orientation = Horizontal. В panel1 и panel2 splitContainer-a добавляем Label-и.В событии загрузки формы прописываем
C#
1
2
3
4
private void Form1_Load(object sender, EventArgs e)
        {
            this.splitContainer1.Panel2Collapsed = true;
        }
Для Label, в котором будет отображаться заголовок, создаем обработчик события Click и прописываем
C#
1
2
3
4
5
6
private void label1_Click(object sender, EventArgs e)
        {
            if (this.splitContainer1.Panel2Collapsed)
                this.splitContainer1.Panel2Collapsed = false;
            else this.splitContainer1.Panel2Collapsed = true;
        }
tableLayoutPanel требуется для компоновки ваших splitContainer-ов. В общем как-то так.
1
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
07.06.2015, 00:27  [ТС]
Спасибо за ответ. Но как сделать чтобы был прокручиваемый список, состоящий из подобных элементов? Мне нужно чтобы был список, каждая строка которого была бы подобным элементом, как вы описали.
0
 Аватар для Adadjio
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
07.06.2015, 00:33
Цитата Сообщение от cheerful_weasel Посмотреть сообщение
Но как сделать чтобы был прокручиваемый список, состоящий из подобных элементов?

tableLayoutPanel поместите внутрь panel и в настройках panel задайте AutoScroll = true;
1
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
07.06.2015, 00:48  [ТС]
Спасибо!

Теперь пойду переваривать информацию)

Добавлено через 11 минут
Теперь возник новый вопрос. А как теперь программно добавлять новые строки в эту таблицу?
В смысле, новые строчки же будут подгружаться постоянно, надо ведь теперь сделать так чтобы при появлении нового проекта автоматически добавлялась в таблицу строка, в эту строку добавлялся splitContainer, в него добавлялся Label и т.д.
0
 Аватар для Adadjio
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
07.06.2015, 00:56
Добавление новой строки в tableLayoutPanel:
C#
1
this.tableLayoutPanel1.RowStyles.Add(new RowStyle());
Добавление Label в нужную строку:
C#
1
2
Label l1 = new Label();
this.tableLayoutPanel1.Controls.Add(l1, 0, 2);
где 0 это колонка, а 2 номер нужной строки.
1
 Аватар для СвободныйНик
191 / 180 / 114
Регистрация: 28.07.2013
Сообщений: 610
07.06.2015, 01:04
cheerful_weasel,
Цитата Сообщение от cheerful_weasel Посмотреть сообщение
Какой контрол поможет это сделать?
как вариант: можно использовать DataGridView, подстроку начинать с уникального символа (например "-"),
подключить событие DataGridView1MouseClick(object sender, MouseEventArgs e)
Кликните здесь для просмотра всего текста
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
void Form1Load(object sender, EventArgs e)
{
    dataGridView1.Rows.Add("Список1");
    dataGridView1.Rows.Add("-Подсписок1");
    dataGridView1.Rows.Add("-Подсписок2");
    dataGridView1.Rows.Add("-Подсписок3");
    dataGridView1.Rows.Add("-Подсписок4");
    dataGridView1.Rows.Add("-Подсписок5");
    dataGridView1.Rows.Add("Список2");
    dataGridView1.Rows.Add("-Подсписок1");
    dataGridView1.Rows.Add("-Подсписок2");
    dataGridView1.Rows.Add("-Подсписок3");
    dataGridView1.Rows.Add("-Подсписок4");
    dataGridView1.Rows.Add("-Подсписок5");
    dataGridView1.Rows.Add("Список3");
    dataGridView1.Rows.Add("-Подсписок1");
    dataGridView1.Rows.Add("-Подсписок2");
    dataGridView1.Rows.Add("-Подсписок3");
    dataGridView1.Rows.Add("-Подсписок4");
    dataGridView1.Rows.Add("-Подсписок5");
    dataGridView1.Rows.Add("Список4");
    dataGridView1.Rows.Add("-Подсписок1");
    dataGridView1.Rows.Add("-Подсписок2");
    dataGridView1.Rows.Add("-Подсписок3");
    dataGridView1.Rows.Add("-Подсписок4");
    dataGridView1.Rows.Add("-Подсписок5");
    dataGridView1.Rows.Add("Список5");
    dataGridView1.Rows.Add("-Подсписок1");
    dataGridView1.Rows.Add("-Подсписок2");
    dataGridView1.Rows.Add("-Подсписок3");
    dataGridView1.Rows.Add("-Подсписок4");
    dataGridView1.Rows.Add("-Подсписок5");
    for(int i=0;i<dataGridView1.Rows.Count;i++){
        if(dataGridView1.Rows[i].Cells[0].Value.ToString().Substring(0,1)=="-") {
            dataGridView1.Rows[i].Visible = false;
        }
    }
    dataGridView1.RowHeadersVisible = false;
    dataGridView1.ColumnHeadersVisible = false;
    dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
void DataGridView1MouseClick(object sender, MouseEventArgs e)
{
    int row = dataGridView1.CurrentCell.RowIndex;
    if(row<dataGridView1.Rows.Count-1 && dataGridView1.Rows[row].Cells[0].Value.ToString().Substring(0,1) != "-"){
        if(dataGridView1.Rows[row+1].Visible == false){
            for(int i_row=row+1;i_row<dataGridView1.Rows.Count;i_row++){
                if(dataGridView1.Rows[i_row].Visible == true){
                    break;
                }
                dataGridView1.Rows[i_row].Visible = true;
            }
        }
        else{
            for(int i_row=row+1;i_row<dataGridView1.Rows.Count;i_row++){
                if(dataGridView1.Rows[i_row].Cells[0].Value.ToString().Substring(0,1) != "-"){
                    break;
                }
                dataGridView1.Rows[i_row].Visible = false;
            }
        }
    }
}


Цитата Сообщение от cheerful_weasel Посмотреть сообщение
как теперь программно добавлять новые строки
выделить подстроку и добавить:
C#
1
dataGridView1.Rows.Insert(dataGridView1.CurrentCell.RowIndex+1,"-Подсписок9");
1
Эксперт .NET
 Аватар для Rius
13131 / 7691 / 1677
Регистрация: 25.05.2015
Сообщений: 23,465
Записей в блоге: 14
07.06.2015, 01:09
Делал такое на List view с кастомной отрисовкой итемов. Пример - окно удаления программ в Windows XP.
1
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
07.06.2015, 01:16  [ТС]
Спасибо всем)

Буду теперь пробовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2015, 01:16
Помогаю со студенческими работами здесь

Заполнение списка и вывод отсортированного списка на экран
нужно Создать список,значения которого равны значениям массива.Создать список,равный отсортированному первому списку. ...

Метод раскрытия списка JComboBox
Здравствуйте. 1) К какому методу нужно обратиться, чтобы раскрыть список JComboBox? 2) Чем отличаются логические методы isFocusable(),...

Вывод одного списка
Не смог додуматься как получить один чистый список. Есть список, из него нужно вывести очищенный вариант. Длина списка произвольная ...

Как убрать кнопку раскрытия списка в combobox
В принципе, вопрос уже задан. Нужно убрать кнопку, которая раскрывает список. Только, если нужно редактировать сам combobox, объясните,...

Горячие клавиши для раскрытия выпадающего списка
Добрый вечер! Возник вопрос: какими горячими клавишами можно раскрыть вот такой выпадающий список после того, как встал на ячейку?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru