Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 196
от 16.09.2005, 18:12

Администратор:Калашников О.А.
В рассылке:Подписчиков: 197, Экспертов: 31
В номере:Вопросов: 1, Ответов: 4


Вопрос № 26168: Подскажите пожалуйста, как мне из одной формы передать данные во вторую. Например у меня в Form1 есть масив данных типа String text[m][n], как мне его прочитать в Form2 ? И еще я пробывал писать extern перед инициализацией масива, а мне выла...

Вопрос № 26.168
Подскажите пожалуйста, как мне из одной формы передать данные во вторую. Например у меня в Form1 есть масив данных типа String text[m][n], как мне его прочитать в Form2 ?

И еще я пробывал писать extern перед инициализацией масива, а мне вылазит ошибка Linker error типа нет такой переменной в файле назва моего файла.obj
Отправлен: 11.09.2005, 18:10
Вопрос задал: Etenity (статус: 5-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: _DM_
Здравствуйте, Etenity!
Не знаю на сколько грамотно я решаю этот вопрос, но делаю так.
Положим ваша основная форма, это файл Unit1.cpp с заголовочным файлом Unit1.h. (Unit2.cpp и Unit2.h - вторая форма соответственно).
Что бы сделать доступной из Unit1.cpp дополнительную форму Unit2.cpp в форму
Unit1.cpp добавляю строку #include "Unit2.h".

Теперь например хочу сделать доступной из обоих форм переменную int Count;

В форме Unit2.cpp добавляю глобально переменную int *mCount (или в класс TForm2 в разделе public или private) и добавляю в класс TForm2 функцию (если указатель private): void InitGlobal(int *count).
Затем в Unit1.cpp вызываю в событии OnShow главной формы:
Form2->InitGlobal( &Count ); //и передаю туда ссылку на переменную Count.

Теперь указатель mCount указывает на область памяти, где находится переменная Count, и она становится доступной из обоих (трёх, пяти ...) форм.

Сделать можно и немного иначе, но смысл тот же, создать указатель на область памяти(или ссылку) и передать его в другую форму.
В вашем случае ещё можно попробовать объявить массив в Unit2.h, после чего включить Unit2.h в Unit1.cpp.
extern не помог потому что он создают глобальную переменню для того модуля, в которой она объявлена, и не имеет обратной силы. Т.е. если text - глобальная для модуля Unit1.cpp, а связи между Unit1.cpp и Unit2.cpp нет или Unit2.cpp включен, то Unit2.cpp ничего не знает о глобальных переменных Unit`а1.cpp.
Тем не менее, м.б. существует другой способ? С удовольствием послушаю жругих экспертов.

Приложение:

Ответ отправил: _DM_ (статус: 2-ой класс)
Отправлен: 12.09.2005, 06:30
Оценка за ответ: 5
Комментарий оценки:
Я пока дождался ответа сам его нашел :)
Я просто "оголошую" (забыл как ето слово по руски) переменную в Unit2.h в классе TForm2.
В прынципе как вы и написали.
Извините, что побиспокоил попросту

Отвечает: Romodos
Здравствуйте, Etenity!
Просто поставьте
#include "Unit1.cpp"
в начале unit2
---------
FAQ me off!
Ответ отправил: Romodos (статус: 6-ой класс)
Отправлен: 12.09.2005, 07:05
Оценка за ответ: 4
Комментарий оценки:
Я пока дождался ответа сам его нашел :)
Я просто "оголошую" (забыл как ето слово по руски) переменную в Unit2.h в классе TForm2.
А так, как вы описали я пробывал и у меня не получилось.
Извините, что побиспокоил попросту

Отвечает: Jadd
Здравствуйте, Etenity!
а зачем extern? Не проще просто в разделе uses формы Form1 написать unit2 (это где твоя вторая форма Form2 описана) и юзать доступные объекты этой формы (Form2.text)?
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 12.09.2005, 11:58
Оценка за ответ: 4
Комментарий оценки:
Я пока дождался ответа сам его нашел :)
Я просто "оголошую" (забыл как ето слово по руски) переменную в Unit2.h в классе TForm2.
Я непонял ваш ответ. Где етот раздел? Интересно было бы посмотреть на ваш вариант...
Извините, что побиспокоил попросту

Отвечает: Татьяна
Здравствуйте, Etenity!
Я думаю extern тут не нужен.
Самым простым будет подключить юнит с Form1 в Form2, после чего использовать все доступные поля второй формы. Если же это поле у вас находится в приватной секции, описать в первой форме функцию типа getText, которая собственно и будет передавать этот массив.
Желаю удачи!
---------
Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 2-ой класс)
Отправлен: 12.09.2005, 20:06
Оценка за ответ: 4
Комментарий оценки:
Я пока дождался ответа сам его нашел :)
Я просто "оголошую" (забыл как ето слово по руски) переменную в Unit2.h в классе TForm2.
Ваш вариант я совсем не понял, надо бы было описать подробнее... Но я сам нашел решение и от етого даже очень рад... Етим и нравиться мне програмирование, когда я нахожу решение задачи, которую долго обдумывал...
Извините, что побиспокоил попросту


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Отписаться
Вспомнить пароль

В избранное