Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2010, 18:39   #1
Dobray
 
Регистрация: 17.11.2009
Сообщений: 6
По умолчанию Visual C++ MFC Циклы

Доброго времени суток, господа форумчане. В ходе работы над некой программой возникла проблема. Не буду описывать весь процес, зачем и почему это надо, остановлюсь на одном моменте. Есть 10 Edit`ов. Каждому из них присвоенна переменная типа CString с именем от m_e1 до m_e10 каждому Edit`у соответственно. Так же есть массив char massiv[10][10]; В ходе программы это массив заполняется данными. Так вот суть вопроса: как организовать цикл, что бы данные из массива присваливались переменным в Edit`ах? Так же интересует обратный процесс. Как из данных 10 Edit`ов с помощью цикла записать данные в массив, и как это сделать с int`овскими переменными, т.к. они тоже встречаются.
Вот что у меня есть:

Код:
CEdit* p;
for (int x=IDC_EDIT1; x<(IDC_EDIT10+1); x++)
{
	p=(CEdit*)GetDlgItem(x);
	p->SetWindowText("qwerty");
}
Данный цикл заносит в Edit`ы строку "qwerty". В принципе полезно. Но. Если мы на форму в ходе разработки вставляли, допустим, Edit, Edit, Button, Edit, то данная "qwerty" присвоится и Edit`ам и Button`у и всему что мы вставим в этот промежуток между первым и последним Edit`ом... + если после данного цикла написать UpdateData(0); то поля соответственно обнулятся... Вобщем мне это не подходит. Ничего другого к сожалению не имею. И так, кто может помочь написать это красиво и убодно, буду премного благодарен.
P.S. работаю в MSVS 6.0 MFC Dialog based
Dobray вне форума Ответить с цитированием
Старый 03.05.2010, 20:21   #2
Dobray
 
Регистрация: 17.11.2009
Сообщений: 6
По умолчанию

ап ___/\___
Dobray вне форума Ответить с цитированием
Старый 03.05.2010, 20:24   #3
confucius
Пользователь
 
Аватар для confucius
 
Регистрация: 01.05.2010
Сообщений: 15
По умолчанию

Dobray

Занести указатели на свои переменные m_e1 ... m_e10 в массив, в C++ невозможно динамически обратиться к переменной по имени.
confucius вне форума Ответить с цитированием
Старый 03.05.2010, 20:54   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2confucius
ты не вкурил ниразу. он не пытается обращаться к переменной по имени. в мфц для каждого контрола есть id, вот он и получает относительно id указатели на свои контролы. да, можно занести нужные указатели в массив

2Dobray
вот не хотел я тут отписываться....
ну смотри
Код:
for (int x=IDC_EDIT1; x<(IDC_EDIT10+1); x++)
проходишься якобы по всем эдитам. но EDIT1...N это дефайны, генерируемые средой (объявления в resources.h).
например, добавил ты 2 эдита(IDC_EDIT1, IDC_EDIT2), кнопку(IDC_BUTTON1), эдит(IDC_EDIT3).

в реале как выглядит твой файл ресурсов:
#define IDC_EDIT1 1
#define IDC_BUTTON1 2
#define IDC_EDIT2 3
#define IDC_EDIT3 4

вот ты и получается, что ты пробегаешься по всем контролам в своем цикле. (ну не по всем, а которые попадают в промежуток). решение? как уже сказали - занеси нужные указатели в массив/вектор, либо просто отсортируй нужным образом resource.h файл. чтоб он принял след вид:
#define IDC_EDIT1 1
#define IDC_EDIT2 2
#define IDC_EDIT3 3
#define IDC_BUTTON1 4

в этом случае тебе нужно жестко следить за добавлением новых контролов, чтоб эта сортировка не нарушилась. ну и еще перестанут работать аналогичные циклы (если они присутствуют), соответственно, их тоже нужно переписать в соответствии с этими правилами
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 16.05.2010, 20:42   #5
Dobray
 
Регистрация: 17.11.2009
Сообщений: 6
По умолчанию

спасибо что отписались. проблема решилась так:
есть всё теже CString`овые переменные m_e1, m_e2, ..., m_e10. я сделал массив CString *p[10]={&m_e1, &m_e2, ... , &m_e10}; всё заработало как мне нужно было, т.е. p[i]=mas[i]; суём в цикл, всё красиво и удобно с int`ами аналогично.
Dobray вне форума Ответить с цитированием
Старый 16.05.2010, 20:42   #6
Dobray
 
Регистрация: 17.11.2009
Сообщений: 6
По умолчанию

спасибо что отписались. проблема решилась так:
есть всё теже CString`овые переменные m_e1, m_e2, ..., m_e10. я сделал массив CString *p[10]={&m_e1, &m_e2, ... , &m_e10}; всё заработало как мне нужно было, т.е. p[i]=mas[i]; суём в цикл, всё красиво и удобно с int`ами аналогично.
Dobray вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
среда разработки Visual C++, MFC shurik_7866 Visual C++ 1 12.02.2010 19:05
Visual Studio 2008 и C++(MFC) rockedit Visual C++ 7 18.12.2009 23:27
Ув.программисты,помогите! MFC,Visual C++ zatey_ka Помощь студентам 1 20.10.2008 14:45
Visual c++(MFC) CUtty Visual C++ 1 13.10.2008 21:21
Примеры для Visual C++ MFC RMih Visual C++ 2 29.01.2008 12:25