С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427

Выбранный элемент в ComboBox

27.04.2013, 20:10. Показов 5970. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здрасьте.
Как узнать что написанно в выбранном элементе ComboBox ?
К примеру пользователь выбрал элемент - "String15".
Вот как мне узнать что там написано String15 ?????
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2013, 20:10
Ответы с готовыми решениями:

Как обрабатывать выбранный элемент списка Combobox
Здравствуйте . Пытаюсь разобраться с Combobox. Вот код , где я его создаю и заполняю элементами : #include <Windows.h> ...

C# Выбранный элемент в comboBox добавить к тексту в этом же comboBox
Здравствуйте Есть один comboBox, в котором будет около 20 элементов в выпадающем списке. Нужно когда пользователь выбирал этот...

Получить выбранный элемент в ComboBox
Как добавить выбор элемента DropDowmList? в листе выбираем значение косинус или синус вводим угол и считаем protected void...

24
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.04.2013, 20:19
http://msdn.microsoft.com/en-u... s.85).aspx
0
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
27.04.2013, 21:40  [ТС]
Лучший ответ Сообщение было отмечено BeginerMan как решение

Решение

Ага , всё разобрался , кому интересно то вот :
C++
1
2
char option[21];
GetDlgItemText(hwnd,ID_COMBOBOX,option,20);
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
16.08.2020, 21:06
Цитата Сообщение от BeginerMan Посмотреть сообщение
Ага , всё разобрался , кому интересно то вот :
C++
1
2
char option[21];
GetDlgItemText(hwnd,ID_COMBOBOX,option,20);
А у меня не работает, функция просто ноль возвращает и не заполняет буффер.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
17.08.2020, 15:31
Цитата Сообщение от Optimus11 Посмотреть сообщение
А у меня не работает, функция просто ноль возвращает и не заполняет буффер.
Проверь GetLastError, возможно буфер слишком маленький. А вообще, в комбо-боксе обычно запрашивается индекс текущего элемента при помощи CB_GETCURSEL, а не текст окна
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
17.08.2020, 16:46
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Проверь GetLastError, возможно буфер слишком маленький. А вообще, в комбо-боксе обычно запрашивается индекс текущего элемента при помощи CB_GETCURSEL, а не текст окна
Да, я так и сделал, запросил порядковый номер выбранной строки выпадающего списка с помощью CB_GETCURSEL. Но мне хотелось еще именно получить текст строки которую выбрали.
Разбираться с GetDlgItemText не стал, текст получил с помощью вызова GetWindowText с предварительным вызовов SendMessage c флагом SetCursel и порядковым номером от CB_GETCURSEL.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
17.08.2020, 16:50
Цитата Сообщение от Optimus11 Посмотреть сообщение
Да, я так и сделал, запросил порядковый номер выбранной строки выпадающего списка с помощью CB_GETCURSEL. Но мне хотелось еще именно получить текст строки которую выбрали.
CB_GETLBTEXT
А по какому сообщению ты делал GetWindowText?
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
17.08.2020, 17:06
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
CB_GETLBTEXT
А по какому сообщению ты делал GetWindowText?
Я отловил выбор строки из выпадающего списка с помощью CBN_SELCHANGE, получил его порядковый номер с помощью CB_GETCURSEL, установил в окно комбобокса эту строку с помощью CB_SETCURSEL и уже получил этот устанволенный текст в окне комбобокса с помощью GetWindowText:

C++
1
2
3
4
5
6
7
8
9
if (HIWORD(wParam) == CBN_SELCHANGE)
{
     int number_ = SendMessage(GetDlgItem(hWnd, 100), CB_GETCURSEL, 0, 0);  
 
     SendMessage(GetDlgItem(hWnd, 100), CB_SETCURSEL, (WPARAM)number_, 0);
 
     char* my_char_p = new char[100];
     GetWindowTextA(GetDlgItem(hWnd, 100), my_char_p, 100);
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
17.08.2020, 17:10
Цитата Сообщение от Optimus11 Посмотреть сообщение
Я отловил выбор строки из выпадающего списка с помощью CBN_SELCHANGE, получил его порядковый номер с помощью CB_GETCURSEL, установил в окно комбобокса эту строку с помощью CB_SETCURSEL и уже получил этот устанволенный текст в окне комбобокса с помощью GetWindowText:
CBN_SELCHANGE приходит раньше, чем комбо-бокс поменяет текст окна (вроде бы). Попробуй вызвать в нём CB_GETLBTEXT, вместо CB_SETCURSEL/GetWindowTextA
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
17.08.2020, 23:13
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
CBN_SELCHANGE приходит раньше, чем комбо-бокс поменяет текст окна (вроде бы). Попробуй вызвать в нём CB_GETLBTEXT, вместо CB_SETCURSEL/GetWindowTextA
Ага тоже работает. Спасибо!

Добавлено через 52 минуты
А подскажите, есть функция которая возвращает кол-во строк в CobmboBox`е ?

Можно сделать конечно по простому:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int cntr=0; //для подсчета числа строк
 
for(int i=0; i< 100000; i++)
{
number_ = SendMessageA(HWND_combobox, CB_GETLBTEXTLEN, i, 0); //Получаем длинну строки по порядковому i-му номеру в окне комбобокса.
 
 
     if(number_ == -1) // Если CB_GETLBTEXTLEN возвращает -1, то значит этой строки с i-номером уже нет.
     {
      break;
     }
 
cntr = cntr+1;
 
}
Но может есть просто функция какая или флаг ? На MSDNe что то не нашел.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.08.2020, 11:09
Цитата Сообщение от Optimus11 Посмотреть сообщение
А подскажите, есть функция которая возвращает кол-во строк в CobmboBox`е ?
CB_GETCOUNT
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
18.08.2020, 17:40
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Или я не понял все нюансы, как она работает или этот флаг не возвращает число строк списка комбобокса, Если строки в комобокс добавили уже в самой процедуре Winproc.

То есть те строки, которые добавлены до самого первого вызова Winproc - CB_GETCOUNT считает корректно, а те что добавили уже во время Windproc - уже почему то не считает.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.08.2020, 17:42
Цитата Сообщение от Optimus11 Посмотреть сообщение
То есть те строки, которые добавлены до самого первого вызова Winproc - CB_GETCOUNT считает корректно, а те что добавили уже во время Windproc - уже почему то не считает.
Всё он должен считать. Покажи код.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
18.08.2020, 17:47
Собственно код состоит из трех строчек:

C++
1
2
3
4
5
6
7
8
int number_ = 0;
 
number_ = SendMessageA(window_cobobox_HWND, CB_GETCOUNT, 0, 0);
 
    if (number_ == CB_ERR)
    {
        return "Error: CB_GETCOUNT == CB_ERR";
    }
При этом, если подсчитать, как я написал выше, то возвращает корректное число.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.08.2020, 17:49
Цитата Сообщение от Optimus11 Посмотреть сообщение
Собственно код состоит из трех строчек:
Остальной код тоже покажи. Сам же пишешь, что в одном месте работает нормально, в другом - нет
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
18.08.2020, 17:52
Неее, я имел ввиду, если я убираю код с CB_GETCOUNT и вставлю код с подсчетом вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int cntr=0; //для подсчета числа строк
 
for(int i=0; i< 100000; i++)
{
number_ = SendMessageA(HWND_combobox, CB_GETLBTEXTLEN, i, 0); //Получаем длинну строки по порядковому i-му номеру в окне комбобокса.
 
 
     if(number_ == -1) // Если CB_GETLBTEXTLEN возвращает -1, то значит этой строки с i-номером уже нет.
     {
      break;
     }
 
cntr = cntr+1;
}
То подсчет строк в комбобоксе корректный - остальной код не меняется совершенно.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.08.2020, 17:54
Цитата Сообщение от Optimus11 Посмотреть сообщение
Неее, я имел ввиду, если я убираю код с CB_GETCOUNT и вставлю код с подсчетом вот так:
Где ты это делаешь, по какому сообщению?
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
18.08.2020, 17:59
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Где ты это делаешь, по какому сообщению?
Просто в коде, без отлавливания сообщения. Просто получаю HWND комбобокса и вызываю:
C++
1
SendMessageA(window_cobobox_HWND, CB_GETCOUNT, 0, 0);
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.08.2020, 18:04
Цитата Сообщение от Optimus11 Посмотреть сообщение
Просто в коде, без отлавливания сообщения. Просто получаю HWND комбобокса и вызываю:
В каком "просто коде", в WinMain? Покажи этот код
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
18.08.2020, 18:09
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
 
thread My_thread(My_create_window_and_vipadayshiy_spisok);  //Запускаю мое окно с комбобоксом в отдельном потоке. В окне предусмотрено, если я кликаю мышью, то в комбобокс добавляется строка.
 
Sleep(2000); 
 
HWND window_cobobox_HWND;
Test2(window_cobobox_HWND);    //Функция которая возвращает мне HWND моего нужно комбобокса из выше запущенного окна.
 
int number_ = 0;
number_ = SendMessageA(window_cobobox_HWND, CB_GETCOUNT, 0, 0);  // получаю кол-во строк
cout<<number_ <<endl;
 
My_thread.join();
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2020, 18:09
Помогаю со студенческими работами здесь

Преобразовать выбранный элемент Combobox в собственный тип
Есть ComboBox заполняю его так: List&lt;genreClass&gt; genreClasslist=new List&lt;genreClass&gt;(); while (reader.Read()) ...

Как выбранный элемент в combobox перенести в edit
Здраствуйте, подскажите как записать в edit значение combobox? В комбобоксе присутствуют 8 записей, как отобразить в edit выбранную...

Забиндить выбранный элемент в ComboBox c выбранным в ListBox
Суть вопроса в том, что нужно при выборе в ListBox работника по Id автоматом выбирать его категорию. Нужно это сделать через байндинг,...

Как удалить выбранный элемент из коллекции Combobox?
как удалить выбранный элемент из коллекции Combobox С# ?

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru