|
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
|
|
Доступ к компонентам на другой форме03.12.2013, 18:25. Показов 3202. Ответов 7
Метки нет (Все метки)
Как правильно обращаться к компонентам, расположенным на Form1 из Form2? В Unit2.cpp подключил Unit1.h. При компиляции ошибок не выдаёт. Но при выполнении падает например на вызове "Form1->client->Socket->SendText(SendText)".
Второй момент: в Unit2.cpp есть также необходимость использовать переменные, объявленные в Unit1.cpp, поэтому я его заинклюдил, из-за чего была выдана куча варнингов линкера типа "Public symbol '_название_переменной' defined in both module Unit1.obj и Unit2.obj", но переменные сами вроде как работают. Так как правильно всё-таки?
0
|
|
| 03.12.2013, 18:25 | |
|
Ответы с готовыми решениями:
7
Получить доступ к компонентам другой формы получить доступ к компонентам другой программы Доступ к компонентам другой формы |
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||
| 03.12.2013, 19:19 | |||
|
0
|
|||
|
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
|
|
| 03.12.2013, 19:51 [ТС] | |
|
SatanaXIII,
AnsiString SendText, RecvText; идёт сразу после TForm1 *Form1; в "Unit1.cpp". Компонент TClientSocket закинут на Form1. На Form2 я нажимаю по кнопке и вызывается Form1->client->Socket->SendText(SendText);
0
|
|
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
||||||||||||||||
| 05.12.2013, 15:18 | ||||||||||||||||
|
- Max_92, по идее, если Вы только определили глобально строки:
и в файл "Unit2.cpp" Вы включили заголовок "Unit1.h", то в модуле "Unit2" эти строки не должны быть видны! Компилятор должен давать на них ошибки! - Сразу-же скажу как надо определить в модуле "Unit1" глобальные строки SendText и RecvText: 1) - В файле "Unit1.cpp":
2) - В файле "Unit1.h":
снаружи, всюду, куда Вы включите заголовок этого модуля "Unit1.h". - Что касается второй проблемы, то я -бы поставил на строку - Form1->client->Socket->SendText( SendText ); точку останова отладчика, когда при выполнении программы она остановится на этой строке прошел-бы по ней всей указателем мыши от начала и до конца и посмотрел-бы с каким компонентом этой строки связана проблема. - Мне кажется это одно из двух: 1) В модуле "Unit2" не правильно видится строка SendText (о чем я говорил выше). 2) У Вас название строки SendText совпадает с названием метода в злополучной строке. Может, кстати, из за этого он и не правильно видит строку ! ...
2
|
||||||||||||||||
|
40 / 25 / 7
Регистрация: 04.10.2012
Сообщений: 127
|
|
| 05.12.2013, 21:49 | |
|
Скорее всего, дело не в области видимости сокета, а в создании объекта сокета.
Вынеси сокет в отдельный модуль, можно в отдельный класс, и вызывай из любых форм как захочется. Не забудь про создание и уничтожение сокета внутри класса. Если с созданием класса и модуля всё сложно, вызывай форму где сокет, и сделай её инвизибл. Все объекты внутри формы будут созданы, можно обращаться к ним из другой формы.
0
|
|
|
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
|
|||
| 05.12.2013, 23:10 [ТС] | |||
|
Dam33, сокеты вроде как работают и при обычном включении "Unit.h"
Staut, если определять переменные вот так: extern AnsiString SendText, RecvText; то в нужном файле потребуется их ещё раз объявить обычным способом? а то для указателя TForm * Form1 это выглядит именно так. а первый раз я пробовал тупо включить "Unit1.cpp" и ничего хорошего из этого не вышло. Добавлено через 2 минуты Добавлено через 6 минут ещё один вопрос: как можно полностью "разрушить" форму, а не закрыть методом Close() ? Дело в том, что при повторном вызове в Form1 метода Form2->Show() на второй форме остаётся всякий мусор. Кроме явного вызова деструктора на ум ничего не приходит..
0
|
|||
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
||||||||||||||||
| 06.12.2013, 16:08 | ||||||||||||||||
|
- Max_92, что Вы, что Вы, повторю еще раз, постараюсь как можно понятнее. Приведу пример даже не
со строкой, а с простой переменной (int). - Если Вы точно знаете, что переменная ( int first; ) должна быть определена глобально в модуле "Unit1" и не должна быть видна ни в одном другом модуле, то просто пишете в файле "Unit1.cpp":
- Если эта переменная ( int first; ) все-же должна быть видна в других модулях проекта, то добавьте в файл "Unit1.h" следующую запись:
Это страшный источник трудно уловимых ошибок! Ну это, конечно, не относится к рабочим переменным, типа int i, j n; и т.д., хотя и за ними надо пристально следить. За их областью видимости! - А все значащие для проекта переменные, строки, экземпляры классов, указатели на экземпляры классов и т.д. надо делать с уникальными именами! Мне кажется у Вас как-раз в этом и ошибка. Пересмотрите повнимательней имена Ваших переменных, строк, объектов ...
1
|
||||||||||||||||
|
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
|
|
| 06.12.2013, 21:57 [ТС] | |
|
Staut, всё, спасибо. разобрался уже вчера)
0
|
|
| 06.12.2013, 21:57 | |
|
Помогаю со студенческими работами здесь
8
Ошибка 2227, как получить доступ к компонентам другой формы? Доступ к другой форме Доступ к переменной на другой форме Доступ к форме через другой класс Доступ к данным, которые находятся в другой форме Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|