0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 41
1

Вызов функции одного класса из другого

10.09.2012, 15:43. Показов 2499. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В классе Form1 вызывается открытие окна Zoom, а в классе Zoom по кнопке нужно вызвать перерисовку картинки в Form1. подскажите, как.

Form1.h
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
#pragma once
 
#include "Zoom.h"
 
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::IO;
 
namespace Kanal {
 
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void) 
              
        {
            InitializeComponent();
            angleZoomForm = gcnew Zoom;
            distanceZoomForm = gcnew Zoom;
        }
 
 
    private:
 
        Zoom^ distanceZoomForm;
        Zoom^ angleZoomForm;
 
        public:
        void DrawZoomGraph()
        {
                         pictureBoxDistance->Refresh();
        }
////////// описание элементов окна
 
private: System::Void distanceZoomToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
         {
            distanceZoomForm->Show();
         }
.
.
.
    };
   }
Zoom.h
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
#pragma once
 
#include <stdio.h>
 
namespace Kanal {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
        public ref class Zoom : public System::Windows::Forms::Form
    {
    public:
        Zoom(void)
        {
            InitializeComponent();
        }
/////////////// описание элементов окна
 
private: System::Void buttonZoomIn_Click(System::Object^  sender, System::EventArgs^  e) 
             {
                 buttonZoomOut->Enabled = true;
                 Form1->DrawZoomGraph();  // либо так
                 Form1->pictureBoxDistance->Refresh();  // либо так, напрямую
             }
.
.
.
     };
   }
но для вызова функции в Zoom требуется #include "Form1.h"
при включении этого файла появляются, видимо, перекрестные ссылки.
и ошибки
error C2143: syntax error : missing ';' before '^'
error C2061: syntax error : identifier 'Zoom'
error C2065: 'distanceZoomForm' : undeclared identifier
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2012, 15:43
Ответы с готовыми решениями:

Вызов функции из одного класса кнопкой из другого класса
Доброго времени суток. Помогите разобраться с сигналами и слотами. Уже устал перечитывать не могу...

Что-то я не понимаю.Вызов метода одного класса из другого класса
Есть два класса первый содержит атрибуты объекта описывающие кнопку: имя, позиция, размер и тд... А...

Вызов метода одного класса внутри другого класса
PHP передача метода, с класса, в другой класс Столкнулся с проблемой не могу передать метод или...

Вызов функций одного класса из другого класса
В начале был класс public class Matrix { public double matrix; public...

3
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
10.09.2012, 19:11 2
Предложу такое решение :

PictureBox не кидаем на форму , а создаем динамически .
Создаем в дочерней форме, и делаем открытым (public ).

В Zoom.h :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public:
        Zoom(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
 
            pictureBoxDistance = gcnew PictureBox();
        }
 
        
 
    public: System::Windows::Forms::PictureBox ^ pictureBoxDistance;
А закрепляем PictureBox на главной форме

В главной форме обращаемся к PictureBox через дочернюю форму - distanceZoomForm->pictureBoxDistance

В Form1.h ( код конструктора )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
 
             angleZoomForm = gcnew Zoom;
                        distanceZoomForm = gcnew Zoom;
                          // настройки  для примера 
             distanceZoomForm->pictureBoxDistance->Location = Point(25,25);
             distanceZoomForm->pictureBoxDistance->ClientSize = System::Drawing::Size( 150, 150 );
             distanceZoomForm->pictureBoxDistance->BackColor = Color::Black;
 
             this->Controls->Add( distanceZoomForm->pictureBoxDistance);//  добавление на форму
 
        }
Теперь можно обращаться к PictureBox из главной формы не открывая дочернюю.
и так же PictureBox доступен для дочерней формы после открытия .
1
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 41
10.09.2012, 20:49  [ТС] 3
ок, спасибо огромное, принял.
а есть еще идеи, чтоб не переносить pictureBox, а то у меня многое на нее завязано уже, поздно дошел до этой части...
буду рад и благодарен любым еще вариантам без переноса)
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
10.09.2012, 22:57 4
hamster28, нашел множество способов , но все для с# .
С переводом затрудняюсь.

Вот один рабочий вариант :

Передать PictureBox из главной формы в конструктор дочерней :

В Form1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
            
             distanceZoomForm = gcnew Zoom(pictureBox1);// <-- передаем указатель на PictureBox  в дочернюю форму
 
        }
 
    private:  Zoom ^distanceZoomForm;
В Zoom.h :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public ref class Zoom : public System::Windows::Forms::Form
    {               
        public:
 
            Zoom( PictureBox^  pictureBoxDistance )/// <-- здесь "ловим" указатель 
            {
                        
                InitializeComponent();
                //
                //TODO: добавьте код конструктора
                //
 
                this->pictureBoxDistance = pictureBoxDistance;
            }
 
    private : PictureBox^   pictureBoxDistance;
теперь PictureBox виден в дочерней форме, например, изменим его фон на черный
кнопка в Zoom.h :
C++
1
2
3
4
5
6
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
            
                  pictureBoxDistance->BackColor = Color::Black;
               
            }
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2012, 22:57
Помогаю со студенческими работами здесь

Вызов функции одного js файла из другого
Здравствуйтве. есть скрипт, которій создает таблицу изотопов: function table(){ var s,...

Вызов функции из другого класса
Добрый день, пишу в qt. Столкнулся с проблемой вызова функции в другом классе. Все бы ничего, но...

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и...

Вызов функции из другого класса делегатом
Здравствуйте. Имеются два скрипта: Script 1 public Action&lt;float, float&gt; ImgPosChanged =...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru