|
Администратор
|
||||||||||||||||
Ответы на 7 самых частых вопросов по Windows Forms, C++/CLI Edition24.09.2016, 14:02. Показов 37328. Ответов 7
Метки нет (Все метки)
Ответы на 7 самых частых вопросов по Windows Forms
C++/CLI Edition Эта статья является адаптированной для C++/CLI статьёй от HIMenа. Начинающие программисты часто испытывают трудности при переводе примеров кода с C# на C++/CLI. Данная адаптация призвана облегчить этот перевод. Также к некоторым из вопросов приложен проект приложения. Все проекты созданы в Visual Studio 2008. Выражаю благодарность HIMen за качественную статью. Если статья показалась вам полезной, не забудьте поблагодарить автора оригинальной статьи, нажав "+1 Спасибо" или оставив отзыв. Если у вас есть вопросы, замечания или предложения по статье, просьба обращаться в тему-обсуждение. Содержание: #
Особенности работы с двумя формами в C++/CLI Многие примеры показывают, как работать с двумя формами в одном проекте. Для определённости назовём их Form1 и Form2, располагаться они будут в пространстве имён CppCliWinForms. Стоит обратить внимание на то, что пространство имён проекта явно не определено в каждом файле с исходным кодом, поэтому его либо нужно явно определить, написав в начале кода
Не забывайте, что одна форма по-умолчанию не видна другой, пока вы явно не укажете это в коде
8
|
||||||||||||||||
| 24.09.2016, 14:02 | |
|
Ответы с готовыми решениями:
7
Ответы на 7 самых частых вопросов по Windows Forms, C++/CLI Edition - свой способ передачи данных между формами Ответы на 7 самых частых вопросов по WinForms Непонятен пункт 2.5 из "Ответы на 7 самых частых вопросов по WinForms" |
|
Администратор
|
|||||||||||
| 24.09.2016, 14:03 [ТС] | |||||||||||
|
1. Как создать вторую форму? # ▲
Любая форма представляет из себя класс, унаследованный от Form. Экземпляр главной формы создается в файле <имя формы>.cpp по-умолчанию.
Чтобы отобразить вторую форму, нужно создать экземпляр этого класса (Form2), например, в обработчике события главной формы
3
|
|||||||||||
|
Администратор
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 24.09.2016, 14:03 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2. Как передать данные из одной формы в другую? # ▲
Часто возникает необходимость передать данные из одной формы в другую; есть 7 способов, у каждого из которых свои недостатки и достоинства. 2.1. Изменение модификатора доступа # ▲ В Form2 установить модификатор доступа для контрола/поля public В любом месте Form1
- Противоречит всем основам ООП - Возможна передача только из более поздней формы в более раннюю - Форма f показывается только с использованием ShowDialog(), т.е. в первую форму управление вернется только по закрытию второй. Избежать этого можно, сохранив ссылку на вторую форму в поле первой формы Проект: WindowsForms_2_1.zip 2.2. Использование открытого свойства/метода # ▲ В классе Form2 определяем свойство (или метод)
- Минусы те же Проект: WindowsForms_2_2.zip 2.3. Передача данных в конструктор # ▲ Изменяем конструктор Form2
+ Не нарушает ООП - Возможна передача только из более ранней формы в более позднюю Проект: WindowsForms_2_3.zip 2.4. Передача ссылки в конструктор # ▲ Изменяем конструктор Form2
+ Передача данных возможна в обе стороны - Нарушает ООП Проект: WindowsForms_2_4.zip 2.5. Используем свойство 'владелец' # ▲ При создании второй формы устанавливаем владельца
+ Передача данных возможна в обе стороны + Не нарушает ООП Проект: WindowsForms_2_5.zip 2.6. Используем отдельный класс # ▲ Создаем отдельный класс со статическим свойством и в основном пространстве имёню Удобнее всего будет разметить его в отдельном заголовочном файле, ссылку на который поместить в stdafx.h
Проект: WindowsForms_2_6.zip 2.7. Использование функций обратного вызова # ▲ 2.7.1 Передача метода в конструктор Создаем в основном пространстве имён делегат
2.7.2. Создание отдельного класса с делегатом Создаем в основном пространстве имён отдельный класс
- Сложен в реализации и понимании Проект: WindowsForms_2_7_2.zip
6
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Администратор
|
||||||||||||||||||||||||||
| 24.09.2016, 14:04 [ТС] | ||||||||||||||||||||||||||
|
3. Как получить доступ к контролу из другого потока? # ▲
.NET не позволяет обращаться к контролам напрямую из других потоков. 3.1. Простой и неправильный способ Отменяем проверку, из какого потока используется контрол
3.2. Использование методов Invoke/BeginInvoke Эти методы выполняют указанные делегаты в том потоке, в котором контрол был создан. Invoke вызывает делегат синхронно, BeginInvoke - асинхронно. Чтобы определить, требуется ли Invoke используйте свойство InvokeRequired. Например, объявляем делегат
Пример готового, потокобезопасного метода
5
|
||||||||||||||||||||||||||
|
Администратор
|
|||||||||||
| 24.09.2016, 14:05 [ТС] | |||||||||||
|
4. Как динамически добавить/удалить контрол? # ▲
4.1. Добавление Пример динамического создания кнопки:
4.2. Удаление
4
|
|||||||||||
|
Администратор
|
|||||||||||
| 24.09.2016, 14:05 [ТС] | |||||||||||
|
5. Как создать массив контролов? # ▲
Точно также, как обычный массив
4
|
|||||||||||
|
Администратор
|
||||||
| 24.09.2016, 14:05 [ТС] | ||||||
|
7. Как пройтись по всем однотипным контролам? # ▲
2
|
||||||
| 24.09.2016, 14:05 | |
|
Помогаю со студенческими работами здесь
8
C++/CLI Windows Forms
Литература по C++/CLI Windows Forms
Создание приложения Windows Forms на C++/CLI в Windows 8 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|