Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520

Как программно редактировать набор строк в списке ComboBox?

04.06.2009, 08:02. Показов 3783. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ComboBox, из которого выбирается СОМ порт (СОМ1, СОМ2 и т.д.).
Надо сделать, чтобы в выпадающем списке содержались строки только присутствующих в системе портов, например, только СОМ1 и СОМ8.
Где вообще находится набор строк для ComboBox-a? Кроме как в свойствах.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2009, 08:02
Ответы с готовыми решениями:

Как редактировать и читать набор одновременно?
Кусок кода, который работает: Set cmdDC = Server.CreateObject('ADODB.Command') cmdDC.ActiveConnection = Application('cn') ...

Задать количество строк в выпадающем списке ComboBox
Есть ComboBox с 9-ю строками. В выпадающем списке одновременно отображается только 8 и чтобы выбрать 9-ый нужно листать. Вопрос: Как...

Чекбоксы для строк в выпадающем списке ComboBox
Собственно есть ли компонент или как его сделать, чтоб в выпадающем списке были чекбоксы?

14
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
04.06.2009, 08:06
смотри документацию к классу CComboBox.
AddString
Adds a string to the end of the list in the list box of a combo box, or at the sorted position for list boxes with the CBS_SORT style.

DeleteString
Deletes a string from the list box of a combo box
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
04.06.2009, 14:22  [ТС]
http://msdn.microsoft.com/en-u... 44b47.aspx

C++
1
2
3
4
5
6
7
#include "afxwin.h"
    // Add 20 items to the combo box.
CString str;
for (int i = 0; i < 20; i++)
{
str.Format(_T("item string %d"), i);
m_pComboBox->AddString(str);
error C2819: type 'ATL::CStringT<BaseType,StringTraits>' does not have an overloaded member 'operator ->'

И чо ему надо?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
04.06.2009, 14:30
покажи работу с m_pComboBox.
объявление, присваивание...
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
04.06.2009, 20:25  [ТС]
Win XP SP3, MS VisualStudio 2008
Создал MFC проект dialog based.
В редакторе диалогового окна добавил кнопку обработчика сего опыта.
Добавил ComboBox.
Присвоил ему переменную m_pComboBox (public,Value, int)
//Кстати, вышеописанная ошибка выходила, если переменная была типа CString.
Вставил код в обработчик события.
Вставил #include "afxwin.h"
Start Debugging

error C2227: left of '->AddString' must point to class/struct/union/generic type
type is 'int'
- 1 error(s), 0 warning(s)

А у Вас работает?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
04.06.2009, 20:37
Цитата Сообщение от DrMcSheen Посмотреть сообщение
Присвоил ему переменную m_pComboBox (public,Value, int)
Вставил код в обработчик события.
этого я не понял.
я просил показать работу с m_pComboBox, а не описать что ты хотел сделать.
код можешь вывести?
и можешь даже оформить на него авторское право.
все равно никому он не нужен.

Кстати, да, у меня работает. Как работало и 15 лет назад.
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
04.06.2009, 21:28  [ТС]
Простите, я не понимаю, как я должен показать работу.
Видео снять, штоль? Честно, туплю что-то.
Вот весь проект в архиве.
Посмотрите, плиз, где накосячил.
Вложения
Тип файла: rar _COMBO_.rar (3.26 Мб, 32 просмотров)
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
04.06.2009, 22:09
ясно... показать - это значит опубликовать код. прямо в окно сообщения. там еще кнопочки форматирования есть, если не заметил.
asm, Basic, с, с++ и т.д.

посмотрел твой код... елки... документацию пишут не для героев, да?
сделай так, например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void C_COMBO_Dlg::OnBnClickedButton1()
{
    
// Add 20 items to the combo box.
CString str;
CComboBox * lpBox;
lpBox = (CComboBox *)this->GetDlgItem(IDC_COMBO1);
for (int i = 0; i < 20; i++)
    {
    str.Format(_T("item string %d"), i);
    lpBox->AddString(str);
    //m_pComboBox->AddString(str);
    }
}
1
16 / 16 / 2
Регистрация: 08.05.2009
Сообщений: 81
04.06.2009, 22:14
А что нужно-то? в данной задаче объявление int-переменной облегчает работу? можжет просто контролом сделать? ну или как товарищ показал.
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
05.06.2009, 11:26  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
ясно... показать - это значит опубликовать код. прямо в окно сообщения. там еще кнопочки форматирования есть, если не заметил.
asm, Basic, с, с++ и т.д.

посмотрел твой код... елки... документацию пишут не для героев, да?
Да уж. Я только начинаю с С++ работать. Для меня Ваш код как китайская грамота.
Пойду учить матчасть
Но, тем не менее, всё работает, спасибо.
А код я уже выкладывал, поэтому и не понял, что я ещё должен сделать.
А не скажете, почему не работает первоначально обсуждаемый код из msdn?

Xardas А это как должно выглядеть?
Не сделаете простенький вариант, я его как наглядное пособие поизучаю.
0
Заблокирован
05.06.2009, 12:16
Вот кусок кода моего командера, заполняет комобокс (расширенный) названиями логических дисков [GetListDrives] и их системными иконками [GetPathIcon]
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
struct {
   UINT type;        // возвращаемый код из GetDriveType
   LPCSTR name;      // ascii имя
} DriveTypeFlags [] = {
   { DRIVE_UNKNOWN,     "UNKNOWN"    },
   { DRIVE_NO_ROOT_DIR, "NO_ROOT_DIR"},
   { DRIVE_REMOVABLE,   "REMOVABLE"  },
   { DRIVE_FIXED,       "FIXED"      },
   { DRIVE_REMOTE,      "REMOTE"     },
   { DRIVE_CDROM,       "CD-ROM"     },
   { DRIVE_RAMDISK,     "RAMDISK"    },
   { 0, NULL},
};
 
HICON CFexplDlg::GetPathIcon(LPCSTR sPath)
{
    SHFILEINFO FileInfo;
    CImageList * m_pImage = new CImageList();
    VERIFY( m_pImage->Attach(( HIMAGELIST )SHGetFileInfo( sPath,
    GetFileAttributes(sPath) , 
    &FileInfo, sizeof( FileInfo ),
    SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_USEFILEATTRIBUTES )));
    HICON hIcon = m_pImage->ExtractIcon(FileInfo.iIcon);
    m_pImage->Detach();
    return hIcon;
}
 
void CFexplDlg::GetListDrives(CComboBoxEx &m_comboEx)
{
    COMBOBOXEXITEM *pComboExItem = new COMBOBOXEXITEM[1];
    pComboExItem->mask      = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_TEXT ;
    pComboExItem->pszText   = new char[MAX_PATH];
    pComboExItem->iImage    = 0;
    pComboExItem->iSelectedImage = 0;
    pComboExItem->lParam    = 0L;
 
    CImageList *m_pImage = new CImageList();
    m_pImage->Create(16,16,ILC_MASK | ILC_COLOR32,0,0);
 
    HICON hIcon = AfxGetApp()->LoadIcon(IDI_RETURN);
    if(!hIcon)
        hIcon = m_hIcon;
    m_pImage->Add(hIcon);
 
    pComboExItem->iItem = m_comboEx.GetCount();
    sprintf(pComboExItem->pszText," CSIDL_DESKTOP");
    m_comboEx.InsertItem(pComboExItem);
 
    char *chBuf = new char[MAX_PATH];chBuf[0] = '\0';
    DWORD len = GetLogicalDriveStrings(MAX_PATH/sizeof(TCHAR),chBuf);
    for (int i = 0; *chBuf; *chBuf++) 
    {
        for (i = 0; DriveTypeFlags[i].name; i++) 
        {
            if (GetDriveType(&chBuf[0]) == DriveTypeFlags[i].type) 
            {
                sprintf(pComboExItem->pszText,
                    "%c%s%s",
                    chBuf[0],": - ",DriveTypeFlags[i].name);
                pComboExItem->iItem++;
                pComboExItem->iImage++;
                pComboExItem->iSelectedImage++;
                m_comboEx.InsertItem(pComboExItem);
                hIcon = GetPathIcon(chBuf);
                if(hIcon == NULL)
                    hIcon = m_hIcon;
                m_pImage->Add(hIcon);
                break;
            }
        }
        chBuf = strchr(chBuf,'\\');
        if(chBuf != NULL)
            *chBuf++;
    }
    m_pImage->SetBkColor( CLR_NONE );
    m_comboEx.SetImageList(m_pImage);
    m_comboEx.SetCurSel(0);
    m_comboEx.SetFocus();
}
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
05.06.2009, 14:06
Цитата Сообщение от DrMcSheen Посмотреть сообщение
почему не работает первоначально обсуждаемый код из msdn
А кто сказал, что он не работате?
Я его и привел. Только имя переменной поменял.
Потому, что у вас переменная m_pComboBox, объявлена с главном классе как int.
Функции, написанные в документации к какому-то классу работают только с объектами этого класса. Это называется "инкапсуляция", и это написано в первой-второй главе любого учебника.
Так что работать можно либо так, как уже написано - созданием ссылки на объект класса:
C++
1
2
3
4
CComboBox * lpBox;
lpBox = (CComboBox *)this->GetDlgItem(IDC_COMBO1);
...
lpBox->AddString(str);
либо созданием объекта самого класса:
C++
1
2
3
4
CComboBox  ox;
Box.Create(...);
...
Box.AddString(str);
Второй пример создает НОВЫЙ ComboBox.
Так что, на практике, когда создаешь диалоговое окно через редактор ресурсов, применим только первый метод.

Кстати, а где вы опубликовали код объявления m_pComboBox?
Я его нашел только в вашем архиве...
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
05.06.2009, 15:35  [ТС]
YurA_280784, я тут в двух строках-то заблудился, зачем меня таким кодом пугать?
спасибо, попробую разобраться.

Patch, а я вручную m_pComboBox нигде не объявлял, поэтому и код не выложил. Он же автоматом прописывается при добавлении переменной полю, я и описал свои действия:
//...Присвоил ему переменную m_pComboBox (public,Value, int)...
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
05.06.2009, 15:57
Цитата Сообщение от DrMcSheen Посмотреть сообщение
Присвоил ему переменную m_pComboBox (public,Value, int)
вот-вот. это не код, это описание.
смотреть надо в параметрах класса. что у вас за переменная получилась.

Если не секрет, а зачем вы присваивали ComboBox переменную?
Я вообще, никогда DoDataExchange для передача данных в Combo/ListBox не пользовался, но вообще, в архиве у меня лежит такой кусок кода, скачанный когда-то с Интернета.
Он тоже работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
   CMyDialog cd(this);        
   cd.DoModal();            
   cd.cComboMy.AddString("1");
...
// CMyDialog dialog
class CMyDialog : public CDialog
{
public:
   .............
   CMyDialog(CWnd* pParent = NULL);  
   enum { IDD = IDD_DIALOG1 };
   CComboBox    cComboMy;
protected:
   DECLARE_MESSAGE_MAP()
};
 
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_Control(pDX, IDC_COMBO1, cComboMy);
}
А вообще, советую для начала обходится без MFC-Wizard. Он только путает.
Зайдите сюда, неплохо описаны основы:
http://programmistu.h12.ru/mfc/steps/mfc1.html
Удачи в изучении.
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
05.06.2009, 16:26  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
Если не секрет, а зачем вы присваивали ComboBox переменную?
А я по-другому не знаю

Цитата Сообщение от Patch Посмотреть сообщение
Зайдите сюда, неплохо описаны основы:
http://programmistu.h12.ru/mfc/steps/mfc1.html
Удачи в изучении.
Вот, только хотел спросить совета о литературе.
Много чего перелопатил, ничего путного не пишут.
Ещё раз большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2009, 16:26
Помогаю со студенческими работами здесь

Как программно редактировать стилизацию формы?
Вычитал вот что: objectName.Attributes.Add(&quot;style&quot;, &quot;width:100px; width:130px; background-color:aac93f&quot;); Вот я и думаю, можно же...

Как в datagridview редактировать ячейку программно
Можно ли как-нибудь отредоктировать ячейку не выделяя ее? Мне нужно, что бы когда кликаешь по кнопке значение в ячейке менялось.

Как редактировать файл, находящийся в облаке OneDrive программно?
Добрый день! Подскажите пожалуйста, как можно редактировать файл, находящийся в облаке Onedrive в открытом доступе? У меня есть ссылка на...

Как программно редактировать формулу Equation или Mathtype
как в vba можно програмно редактировать формулу equation или mathtype? например, программно вывести 2 в степени2=4

Как программно создавать, редактировать, сохранять MS Word, Excel 2013?
Платформа: Microsoft Visual Studio Community 2015. Предпочитаемый язык программирования: C#. Система: Windows 8.1. Нужно создать очень...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Управление камерой с помощью скрипта 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru