Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
1 / 1 / 1
Регистрация: 06.07.2011
Сообщений: 24

Динамическое создание элементов управления

07.07.2011, 00:20. Показов 4721. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Как добавить например кнопку в форму из не дочерней для класса формы функции?

Вот такой код я оборачиваю в public функцию Form1.h

C++
1
2
3
4
5
6
7
Button^ buttonOK = gcnew System::Windows::Forms::Button ();
this->SuspendLayout();
buttonOK->Location = System::Drawing::Point(200,200);
buttonOK->Size = System::Drawing::Size( 75, 125 );
buttonOK->Text = "OK";
this->Controls->Add(buttonOK);
this->ResumeLayout();
Если я вызываю эту функцию из метода этого класса (например, по нажатию какой-либо кнопки),
либо вставляю вызов до вызова Run:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(array<System::String ^> ^args)
{
    // Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
    //...
 
    Form1 ^ mainForm = gcnew Form1();
    mainForm -> myFunction ();               // <============
    // Создание главного окна и его запуск
    Application::Run(mainForm);/*gcnew Form1()*/
 
    return 0;
}
то кнопка добавляется, но если я размещаю вызов после Run или ещё где-либо в unmanaged - коде ошибок не вылетает, но и кнопка не добавляется.

Так вот, есть ли возможность добавлять любые (в чатности, элементы управления и в частности кнопки) элементы в любое время существования формы? И если есть, то как это сделать?

Спасибо!

Добавлено через 9 часов 3 минуты
Почему не добавляется если написано после Run уже понятно (приложение в той точке уже закрыло форму)

Но проблема остаётся.

Я хочу (в целях соблюдения принципов ООП) использовать методы класса формы (Form1.h)

Когда я обращаюсь к какому либо методу из метода стороннего класса получаю ошибку:

Ошибка компилятора C2352: "недопустимый вызов нестатической функции-члена"
Но я не хочу её делать статической, т.к. тогда невозможно будет из неё получить доступ к другим нестатическим методам класса Form1.h

Как же всё-таки быть-то?
Неужели C++/CLI подразумевает обязательное написание чего-то похожего на спагетти?? Не верю в это...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2011, 00:20
Ответы с готовыми решениями:

Динамическое создание кнопок
Здравствуйте! Нужно создать 2 кнопки на форме. Делаю вот так, но, во-первых, создаётся только 1 кнопка, во-вторых, в отладке цикл...

Динамическое создание объекта класса
Всем салют. Вопрос такой, кто может подсказать, где я косячу ? ))) Panel^ bar = gcnew Panel(); bar-&gt;Location =...

Динамическое создание компонентов в Windows Forms
Доброго времени суток! Пилю курсовую,возникла проблема с динамическим созданием компонентов в VS 2012. По нажатию на кнопку должно...

2
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
07.07.2011, 00:38
Вы бы показали, как вызываете, для вызова нестатического метода ведь нужен объект, который вызывать надо.

Если я правильно понял, то можно как-нибудь так выкрутиться, здесь одна форма создает другую форму, передает ей ссылку на себя, а та уже вызывает метод в форме-создателе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using namespace System;
using namespace System::Windows::Forms;
 
public ref struct Form1 : Form
    {
    ref struct Form2 : Form
    {
    Form1 ^ invokeTarget;
 
    Form2(Form1 ^ f)
        : invokeTarget(f)
        {
        invokeForm1member();
        }
 
    void invokeForm1member()
        {
        invokeTarget->OhMyShit(1);
        }
    };
    Form2 ^ invokeSubject;
    Form1()
        {
        invokeSubject = gcnew Form2(this);
 
        invokeSubject->Show();
        }
 
    void OhMyShit(int n)
        {
        Console::Write("in Form1::OhMyShit ");
        Console::WriteLine(n);
        }
    };
    
int main()
    {
    Application::Run(gcnew Form1);
    }
1
1 / 1 / 1
Регистрация: 06.07.2011
Сообщений: 24
07.07.2011, 01:35  [ТС]
Спасибо!

Есть ещё одна давняя проблема, использования картинок из произвольного .resX
Добавлю в новую тему.

Тама: Как получить картинки из произвольного .resX?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2011, 01:35
Помогаю со студенческими работами здесь

Создание пользовательского элемента управления
Я пишу в Visual C++ 2010. до этого писал в VB. Я делаю кривой графический редактор и свое расширение. Никак не могу найти, как сделать...

Создание элемента управления в Windows form
Товарищи здравствуйте! Нужна помощь в такой задаче: нужно создавать любое количество кнопок с возможностью при создании указывать...

Динамическое создание элементов управления
Возможно ли программно создать компонент тектбокс к примеру? Можете подсказать как.

Динамическое создание элементов управления
Dim row As DataRowView Dim groupBox1 As New GroupBox() Dim f As New System.Drawing.Font(&quot;Comic Sans MS&quot;, 10) ...

Динамическое создание элементов управления
в общем, код написан верно (вроде как), проверял его изначально (добавлял компоненты, к ним код и прога работала), решил сделать через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru