![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
valeriyzf |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
Microsoft Visual C++ 2008 (2005)
В проекте 1 форма и несколько модулей. Но управлять компонентами формы из других модулей не получается. Например: Создаем новый проект "Test1" с пустой формой "Form1". На форму помещаем кнопку "Button1". В заголовочном файле "Form1.h" объявляем процедуру:
Вызываем эту процедуру нажатием кнопки "Button1". А теперь, внимание - задача! Описание самой процедуры
делаем не в этом же файле "Form1.h", а в главном модуле "Test1.cpp". Задача процедуры - изменить текст кнопки на другой, например "Hello forum!". Что должно получиться: Запускаем проект, нажимаем кнопку, и ее текст меняется на указанный в коде. Здесь можно скачать исходничек примера: http://www.cyberforum.ru/visual-cpp/thread93157.html Спасибо! |
||||
|
|||||
586 |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 1 Всего: 146 |
В Form1.h найди строку:
и поменяй её на эту:
и тогда можно будет писать так:
Если нужно изменить текст у существующей формы, то можно написать так:
|
||||||||
|
|||||||||
valeriyzf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
586, Вы просто Гений!
Спасибо огромное!. Я запостил эту тему на 5-ти или 6-ти различных форумах, включая 3 англоязычных. На одном из форумов решение было найдено, но намного более сложное: http://www.daniweb.com/forums/thread259425.html Моей же конечной целью есть управление графикой на форме из других модулей, что также замечательно работает по вашему примеру:
Процедуры обработки графики довольно громоздкие (хотя и простые). Соответственно хотелось их разбить на разные модули. Беру этот форум и Вас лично на заметку. Еще раз Спасибо! ![]() |
|||
|
||||
valeriyzf |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
Вынужден опять поднять тему.
Данный метод не получается применить к компонентам формы типа ListBox
далее в выпадающем списке нету свойств и методов ListBox, например ListBox1->Items Метод
НЕ выдает ошибки, но и ничего не делает с компонентом ListBox1 (private на public в шапке Form1.h заменить не забыл). Заранее спасибо! |
||||
|
|||||
KelTron |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 5 Всего: 38 |
((ListBox)Application::OpenForms["Form1"]->Controls["ListBox1"])->Items Если Change_Button_Text() находится внутри класса формы, то
Иначе передаём как параметр:
Это сообщение отредактировал(а) KelTron - 15.2.2010, 14:33 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||
|
|||||
valeriyzf |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
KelTron, большое спасибо за ответ.
Все выглядит очень заманчиво. Но: Пример №1:
После последней точки действительно появляются методы ListBox. Но компилятор выдает ошибку: error C2440: приведение типов: невозможно преобразовать 'System::Windows::Forms::Control ^' в 'System::Windows::Forms::ListBox' Для преобразования требуется конструктор или оператор пользовательского преобразования, который не может использоваться const_cast или reinterpret_cast Далее, пример №2:
Здесь работает безупречно, но с этим проблем и не было. Внутри класса формы все работает. Далее, пример №3:
Если в качестве параметра функции поставить просто тип (Form form), то у параметра form не будет компонента ListBox1. Т.е. нужен параметр (Form1 form) Я сделал вот так (в отдельном модуле Unit1.cpp):
Все запускается и компилируется без ошибок. Программа выполняется, но ничего с компонентом "ListBox1" не происходит :( |
||||||||
|
|||||||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 5 Всего: 38 |
Блин, невозможно привыкнуть к этому... в C++/CLR нужно ListBox^
Ну это очевидно, я лишь показал принцип. Конечно, ты создаёшь новую форму, никак не связанную с той, что открыта - причём каким то странным способом - как структуру, что то там изменяешь и форма уничтожается. Ты лучше покажи как и где ты создаёшь класс Test. Думаю лучшим решением будет передать форму в конструктор как параметр. -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
valeriyzf |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
Пример №1:
Работает отлично! Спасибо! Спасибо! Спасибо! Что мне нравится на этом форуме, так это что здесь не задают лишних вопросов, и не пересылают тебя на другие темы. А сразу: Вопрос -> Ответ. Еще раз спасибо! ---------------------------------------- Следующий пример уже просто хочется разобрать из вредности, как говориться, спортивный интерес ![]() Пример №3: Логику работы я понял: нужно вызывать процедуру класса, передавая при этом саму форму, как параметр. Но появляется одна загвоздка. Например: Создаю чистый проект "Form_Control_forum" с чистой формой Form1 //не могу приатачить, весит в зипе >1.7Mb На форму добавляю button1 и listBox1. Далее через мастер добавляю класс Test (Test.h, Test.cpp). В шапке класса пишу следующее:
В процедуру обработки события кнопки button1 добавляю:
Но чтобы эта процедура была здесь читаема конструктором, мне нужно добавить в шапку Form1.h следующее:
А так получается перекрёстное добавление шапок: Form1.h -> в Test.h, и наоборот: Test.h -> в Form1.h Что в свою очередь пресекается компилятором... |
||||||||
|
|||||||||
KelTron |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 5 Всего: 38 |
Это конечно всё изврат, но так работает..)
![]() Файл Test.h заменяем на
Файл Test.cpp заменяем на
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||
|
|||||
valeriyzf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.2.2010 Репутация: нет Всего: нет |
Да, скорее всего просто логика построения приложений на Visual C++ 2008 изначально на такую структуру не рассчитана.
Пользователя стараются направить на создание программ с определенной стандартной архитектурой. Ok, еще раз Спасибо! ![]() Ваши советы очень сильно выручили ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |