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

Корректное подключение одной формы к другой

05.11.2017, 16:57. Показов 788. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать некое подобие блокнота, которое поддерживает проверку чисел на простоту. По идее, через главную форму вызывается окно, в которое нужно ввести число, чтобы потом вывести данные о нем в TextBox из главной формы.
Главные претензии - главная форма и ее textbox считаются необъявленными идентификаторами, хотя форма 2 включена в главную. Что я делаю не так?

Форма 2
Кликните здесь для просмотра всего текста
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#pragma once
#include <math.h>
 
int gcd(int x, int y)
        {
            int t;
          while (y != 0) {
            t = y;
            y = x % y;
            x = t;
          }
          return x;
        }
...
 
#pragma endregion
    private: System::Void PockB_Click(System::Object^  sender, System::EventArgs^  e) 
             {
                Form1^f=gcnew Form1();
                textBox1^text = textBox1();
                extern short int iN, iQ;
                extern bool bOne=false; 
                extern bool bTwo=false;
 
                iN=Convert::ToInt16(PockN->Value);
                this->Form1->textBox1->Text+="\nВыбранное число: "+iN.ToString()+".";
 
                for (int q = 1; q < iN; q++)
                {
                    if ((iN-1) % q == 0)
                    {
                        bool simple=true;
                        for(int j=2 ; j<=q/2; j++)
                            if(q%j == 0)
                            {
                                iQ=q;
                                simple=false;
                                break;
                            }
 
                    float fN=sqrt(float(iN))-1;
                    if ((simple) && q>fN && q!=(iN-1))
                        {
                           //cout<<"Delitel "<<q<<" goden"<<"\n";
                            textBox1->Text+="\nДелитель "+q+" годен.";
                            iQ=q;
                        }
                    }
                }
 
                for(int a=2; a<(iN-1); ++a) 
                {
                    unsigned __int64 iA=pow(a, float(iN-1));
                    if(iA%(iN) == 1)
                    {
                        bOne=true; 
                        textBox1->Text+="\nЧисло a равно "+a+". Условие 1 выполнено.";
                        //cout<<"a="<<a<<"\n";
                    }
                    if(iQ==0)
                    {
                        //cout<<"N - sostavnoe.\n";
                        textBox1->Text="Ваше число - составное.";
                        Close();
                    }
 
                    float fNQ=(iN-1)/float(iQ); 
                    int iANQ=pow(a, fNQ)-1;
 
                    if(gcd(iN,iANQ) == 1)
                    {
                            bTwo=true;
                            textBox1->Text+="\nНаибольший общий делитель равен единице. Условие 2 выполнено.";
                            break;
                    }
                }
                if(!bOne)
                    textBox1->Text+="\nУсловие 1 не выполнено.";
                if(!bTwo)
                    textBox1->Text+="\nУсловие 2 не выполнено.";
 
                if(bOne==true && bTwo==true)
                    textBox1->Text+="\nТаким образом, число "+iN+" - простое.";
                else
                    textBox1->Text+="\nТаким образом, число "+iN+" - составное.";
            }
    };
}

Форма 1
Кликните здесь для просмотра всего текста
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#pragma once
#include "Form2.h"
 
short int iN, iQ;
bool bOne=false; 
bool bTwo=false;
 
...
 
#pragma endregion
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) 
             {
                 //задання заголовка додатку
                this->Text = "Текстовый редактор";
                //задання імені файлу
                openFileDialog1->FileName = "*.txt";
                //фільтр для відображення файлів при відкритті файлу
                openFileDialog1->Filter = "Текстові файли (*.txt)|*.txt|All files (*.*)|*.*";
                //фільтр для відображення файлів при закритті
                saveFileDialog1->Filter = "Текстові файли (*.txt)|*.txt|All files (*.*)|*.*";
 
                //перевірка, чи були зміни у файлі
                if (textBox1->Modified == false) 
                {
                    return;
                    DialogResult=MessageBox::Show("Текст було змінено. \nЗберегти зміни?","Простий редактор", MessageBoxButtons::OKCancel, MessageBoxIcon::Exclamation);
                }
                if(Convert::ToString(DialogResult)=="Cancel") 
                {
                    return;
                    textBox1->Text = "Скасовано";
                }
                else{
                //Якщо натиснуто "ОК", то викликається функція
                // Save()для зберкження текстового файлу
                //{
                Save(); return;
                }
 
 
             }
private: System::Void сохранитьToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             saveFileDialog1->FileName = openFileDialog1->FileName; 
             if (saveFileDialog1->ShowDialog() == Windows::Forms::DialogResult::OK) Save();
                }
                void Save()
                {
                try
                {
                SaveFileDialog ^saveFileDialog1 = gcnew SaveFileDialog();
                //фільтр для відображення файлів при закритті файлу 
                saveFileDialog1->Filter = "Текстові файли|*.txt" ; saveFileDialog1->FilterIndex = 2 ;
                saveFileDialog1->RestoreDirectory = true ; if(saveFileDialog1->ShowDialog() ==
                System::Windows::Forms::DialogResult::OK)
                {
                //вивід даних у файл 
                IO::File::WriteAllText(saveFileDialog1->FileName,textBox1->Text);
                }
                }
                catch (Exception^ Ситуация)
                {
                }
 
         }
private: System::Void открытьToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
                {
                System::IO::StreamReader ^ sr = gcnew
                //відкриття елемента openFiledialog 
                System::IO::StreamReader(openFileDialog1->FileName);
                //читання даних із файлу у textBox1
                textBox1->Text = Convert::ToString(sr->ReadToEnd());
                //закриття елемента openFiledialog sr->Close();
                }
         }
private: System::Void выйтиToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             Close();
         }
private: System::Void проверитьЧислоToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             /*Form2 gform2 = new Form2;
             gform2.Owner = this;
             gform2->Show();*/
         }
};
}

P.S. Может ли extern разрешить эту проблему и если да, то как его правильно применить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2017, 16:57
Ответы с готовыми решениями:

Вызвать из одной формы метод другой формы
У меня такая проблема. Есть 2 формы: Form1 и Link. Я пишу в Form1: #include &quot;Link.h&quot; public ref class Form1 : public...

Открытие из одной формы другой
Задача такая. На форме есть кнопка. По клику по кнопке открывается другая форма вместо этой, т.е. первая пропадает, вторая появляется на ее...

Открытие одной формы из другой
Здравствуйте! Создал две формы MyForm и MyForm1 В MyForm.h подключил MyForm1.h в самом начале, в myform1.h подключил myform.h, в...

2
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
05.11.2017, 17:01
Цитата Сообщение от LordSheogorath Посмотреть сообщение
Что я делаю не так?
Не там спрашиваешь.
https://www.cyberforum.ru/cpp-cli-winforms/
1
1 / 1 / 1
Регистрация: 27.10.2016
Сообщений: 15
06.11.2017, 00:52  [ТС]
Уже разобрался. Кому интересно:
1. На второй форме добавить компонент (здесь - textbox1), дописав public, сюда:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form2()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::NumericUpDown^  PockN;
    protected: 
    private: System::Windows::Forms::Label^  label1;
    private: System::Windows::Forms::Button^  PockB;
    [I]public: System::Windows::Forms::TextBox^  textBox1;[/I]

2. На ней же указать его в InitialiseComponent:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
void InitializeComponent(void)
        {
            [I]this->textBox1 = (gcnew System::Windows::Forms::TextBox());[/I]
...
}

3. Уже в главной форме вызывать другую:
Кликните здесь для просмотра всего текста
C++
1
2
3
Form2^ f = gcnew Form2();
             f->ShowDialog();
             textBox1->Text = f->textBox1->Text;


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

Создание одной формы из другой
Здравствуйте. Основная задача - открытие второй формы щелчком на кнопку в первой. В данном разделе видел уже темы с таким названием....

Доступ из одной формы к элементам другой
Всем Привет. Я создал главную форму Form1. И вот так создал дочернюю форму Form2 CHILDREN=gcnew Form2; CHILDREN-&gt;Show(this); ...

Как перейти от одной формы к другой?
Здравствуйте, уважаемые программисты! Помогите мне, пожалуйста! Я не могу перейти от одной формы к другой, пишет ошибку, что не знает...

Открытие одной формы внутри другой
Добрый Всем вечер. В С++ я пока очень слаб, поэтому не ругайте. А по существу - вопрос: Как сделать так, чтобы при открытии второй...

Переход от одной формы к другой с сокрытием первой
Здравствуйте! Только начал изучать Windows Forms, столкнулся с проблемой. Не могу написать кнопку, при нажатии на которую мы будем...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru