Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/43: Рейтинг темы: голосов - 43, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 23.09.2011
Сообщений: 22

ListBox MFC

19.12.2011, 12:47. Показов 7982. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.Такой вопрос: имеется лист бокс и символьный массив. Как можно добавить в строку элементы допустим с 1-ой по 3-ю позиции?Возможно ли вообще такое?

Добавлено через 18 минут
Или может существуют какие-то другие элементы в MFC, позволяющие провернуть такую операцию?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2011, 12:47
Ответы с готовыми решениями:

ListBox в MFC
Как можно создать колонки в ListBox, чтоб например у меня было 3 строки 1 Вася 685-46-24 2 Петр Васильевич ...

ListBox в MFC
Здравствуйте, Уважаемые Программисты, у меня тут вопросик по Visual C++ 6.0, воюю с ним уже оч долго. У меня в 1 классе (класс имеет имя...

Из файла в ListBox (MFC)
Как из файла занести информацию в Listbox. Пытаюсь уже 3 часа занести, ничего не понимаю... void CMyDialog5::OnBnClickedButton2() ...

12
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
19.12.2011, 20:25
C++
1
2
3
4
5
6
CString s;
int arr[3] = { 10, 20, 30 };
for(int i = 0; i < 3; i++) {
     s.Format(_T("%d"), arr[i]);
     m_ListBox.InsertString(i, s);
}
1
0 / 0 / 0
Регистрация: 23.09.2011
Сообщений: 22
20.12.2011, 11:11  [ТС]
Спасибо за ответ, но видимо я не совсем корректно сформулировал вопрос. Возмём вами предложенный массив. Как допустим arr[1] и arr[2] добавить в одну и ту же строку?
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
20.12.2011, 12:25
C++
1
2
3
4
int arr[3] = { 10, 20, 30 };
CString s;
s.Format(_T("%d  %d"), arr[1], arr[2]);
m_ListBox.InsertString(0, s);
1
0 / 0 / 0
Регистрация: 23.09.2011
Сообщений: 22
20.12.2011, 12:41  [ТС]
Спасибо!
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.12.2011, 13:44
xKORESHx, если с листа в его свойствах убрать галочку Sorted то можно использовать вместо
Цитата Сообщение от xAtom Посмотреть сообщение
InsertString(0, s);
- банальный AddString(s); и никаких индексов, а я накидаю как это можно сделать в продвинутом List-е СListCtrl
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.12.2011, 13:56
Код BOOL CListCtrlDlg::OnInitDialog()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
BOOL CListCtrlDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    // TODO: Add extra initialization here
    CString columnhead;
    for(int i = 0; i < 3; i++)
    {
        columnhead.Format(" HEAD %d ",i + 1);
        m_list.InsertColumn(i,columnhead,LVCFMT_LEFT,-1,0);
    }
    m_list.SetColumnWidth(0,-1);
    m_list.SetColumnWidth(1,-1);
    m_list.SetColumnWidth(2,-1);
    return TRUE;  // return TRUE  unless you set the focus to a control
}
Вот код кнопки OK,
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
void CListCtrlDlg::OnOK() 
{
    // TODO: Add extra validation here
    LVITEM lvItem = {0};
    lvItem.mask    = LVIF_TEXT;
    CString s;
    m_list.DeleteAllItems();
    m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    int arr[3] = { 10, 20, 30 };
    for(int i = 0; i < 32; i++)
    {
        lvItem.iSubItem = 0;
        s.Format("entry : %d",arr[0] + i);
        lvItem.pszText = s.GetBuffer(s.GetLength());
        lvItem.iItem   = m_list.GetItemCount();
        m_list.InsertItem(&lvItem);
 
        s.Format("entry : %d",arr[1] + i);
        lvItem.pszText = s.GetBuffer(s.GetLength());
        lvItem.iSubItem++;
        m_list.SetItem(&lvItem);
    
        s.Format("entry : %d",arr[2] + i);
        lvItem.pszText = s.GetBuffer(s.GetLength());
        lvItem.iSubItem++;
        m_list.SetItem(&lvItem);
    }
    m_list.SetColumnWidth(0,-1);
    m_list.SetColumnWidth(1,-1);
    m_list.SetColumnWidth(2,-1);
    //CDialog::OnOK();
}
Миниатюры
ListBox MFC  
1
0 / 0 / 0
Регистрация: 23.09.2011
Сообщений: 22
20.12.2011, 15:02  [ТС]
-=ЮрА=-, Спасибо!)Буду разбираться))

Добавлено через 29 минут
Ещё вопрос: что если заранее не известно количество элементов в массиве?Т.е. допустим есть массив из 500 элементов и в процессе выполнения программы стало известно, что нужно добавить строчку, в которой будут находиться элементы с 30 по 35 позицию допустим.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.12.2011, 15:12
Цитата Сообщение от xKORESHx Посмотреть сообщение
что нужно добавить строчку, в которой будут находиться элементы с 30 по 35 позицию допустим.
- во первых если тебе нужны колонки то нужно сразу, определиться с их числом чтобы их единожды добавить,
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(int i = 0; i < 3; i++)
* * * * {
* * * * * * * * columnhead.Format(" HEAD %d ",i + 1);
* * * * * * * * m_list.InsertColumn(i,columnhead,LVCFMT_ LEFT,-1,0);
* * * * }
- добавляю всего 1 раз

второе я привёл для 3-х параметров, добавь ещё такое же для 3-го и 4-го индексов + смотри на строку формата "entry : %d" - entry : можно просто убрать и выводить число

C++
1
2
3
4
5
6
7
8
s.Format("%d",arr[3]);//4-й єлемент
lvItem.pszText = s.GetBuffer(s.GetLength());
lvItem.iSubItem++;
m_list.SetItem(&lvItem);
s.Format("%d",arr[4]);//5-й єлемент
lvItem.pszText = s.GetBuffer(s.GetLength());
lvItem.iSubItem++;
m_list.SetItem(&lvItem);
1
0 / 0 / 0
Регистрация: 23.09.2011
Сообщений: 22
20.12.2011, 16:51  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- во первых если тебе нужны колонки то нужно сразу, определиться с их числом чтобы их единожды добавить,
В том-то и проблема, что я не знаю заранее сколько столбцов мне нужно. Дело в том, что я пишу лексический анализатор паскаля. Считывание кода происходит из текстового файла. на данный момент реализовал всё за исключением одного: поиска ошибки в тексте. Точнее ошибки-то он находит, а вот вывести их проблема. Не буду полностью описывать алгоритм работы программы. В общем код паскалевский из текстового документа забивается в массив. С этим массивом я потом и работаю. Так вот когда обнаруживается ошибка, программа отслеживает позиции в массиве(с какой позиции ошибка начинается и на какой кончается). Пробовал через динамические массивы(считал количество символов в ошибке и создавал динамический массив выделяя под него кол-во памяти равное кол-ву символов в ошибке и поэлементно этому массиву приравнивал элементы ошибки и полностью потом выводил полученный дин. массив, ошибка выводилась, но вместе с ней куча левых символов). Поэтому заранне кол-во столцов забить не могу.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.12.2011, 17:05
Цитата Сообщение от xKORESHx Посмотреть сообщение
В том-то и проблема, что я не знаю заранее сколько столбцов мне нужно.
- ну вообще колонку можно и добавить и удалить, впринципе не сложно. Как я понял в каждой строке может быть разное количество столбцом(как бы разное число ошибок). Что ж в ListCtrl будет столько колонок сколько колонок в строке с максимальным их числом. Это довольно просто, когда нужно ещё колоночку делаем m_list.InsertColumn(i,columnhead,LVCFMT_ LEFT,-1,0); и здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
void CListCtrlDlg::OnOK()
{
* * * * // TODO: Add extra validation here
* * * * LVITEM lvItem = {0};
* * * * lvItem.mask * *= LVIF_TEXT;
* * * * CString s;
* * * * m_list.DeleteAllItems();
* * * * m_list.SetExtendedStyle(LVS_EX_FULLROWSE LECT);
* * * * int arr[3] = { 10, 20, 30 };
* * * * for(int i = 0; i < 32; i++)
* * * * {
* * * * * * * * lvItem.iSubItem = 0;
* * * * * * * * s.Format("entry : %d",arr[0] + i);
* * * * * * * * lvItem.pszText = s.GetBuffer(s.GetLength());
* * * * * * * * lvItem.iItem * = m_list.GetItemCount();
* * * * * * * * m_list.InsertItem(&lvItem);
- смотрим сколько ещё SubItem (под строк надо добавить)
1
0 / 0 / 0
Регистрация: 23.09.2011
Сообщений: 22
20.12.2011, 17:19  [ТС]
Спасибо ещё раз!Буду пробовать.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.12.2011, 18:02
Цитата Сообщение от xKORESHx Посмотреть сообщение
Спасибо ещё раз!Буду пробовать.
- если будут сложности с CListCtrl приводи код, помогу!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2011, 18:02
Помогаю со студенческими работами здесь

MFC ListBox сортировка
Всем доброго времени суток!! Подскажите, пожалуйста, как через код мне включить значение сортировки ListBox на true, так же как его...

Отобразить в ListBox сумму чисел (MFC)
В верхней задаче нужно ввести число в едит. потом выбрать радиобаттон с числом и в листбоксе должна отображатся их сумма. Подскажите как...

При двойном клике по строке ListBox показать окно с возможностью редактирования этой строки (MFC)
Здравствуйте, как сделать так что бы при двойном клике по строке listBoxa выбивало окошко с возможностью редактирования этой строки?

Из MFC 2012 в MFC 2005
Есть прокт для студии 12, всё хорошо, писал на 8ке в VS 2012 и он отлично работает. Позже понадобилось портировать его для 2005, я это всё...

подключение классов MFC к не MFC
Как подключить MFC Class From ActiveX Control к не MFC проекту? т.е. пишу обычными винапи функциями, а из этого класса нужны функции...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru