Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 15.09.2018
Сообщений: 5
1

Как передать данные из функции в форму

28.09.2018, 21:24. Показов 693. Ответов 10
Метки нет (Все метки)

Прошу помочь!
Мне 55 лет и волей нашего правительства мне еще 10 лет работать, поэтому приходится изучать VS 2010 и C++! Ранее много писал на ANSI C для контроллеров, поэтому думал, что будет не сложно перейти, ан нет!

Исходные данные:
Проект Test.
Основной файл: testmain.cpp
Файл формы (форма одна): Form1.h
Файл функций: functions.cpp
Заголовочный функций: functions.h
Заголовочный: "stdafx.h"

-----------------------------------------------------------------------------------------------------------------
В "stdafx.h" записано:
---------------------------

C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
 
#include "windows.h"
#include <iostream>
#include <locale.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <stdlib.h>
#include <fstream>
#include <io.h>
#include <string.h>
-----------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------
В testmain.cpp записано:
-----------------

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"                  
#include "Form1.h"
#include "functions.h"  
 
using namespace std;
using namespace Test;
using namespace System::Windows::Forms;
 
 
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 
 
    Application::Run(gcnew Form1());
    return 0;
}
-----------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------
В Form1.h записано:
-------------------
Стандартно, что создает само приложение при выполнении помощника, и еще дополнено comboBox1 и textBox1.
Никаких обработчиков событий нет, ничего!

-----------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------
В functions.cpp записано:
-------------------

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"         // Не перемещать - он идет первый!
#include "functions.h"  
#include "Form1.h"
 
using namespace std;
using namespace System::Windows::Forms;
using namespace Test;
 
string  input1;
int output1 = 100;
 
int calc1(void)
{
input1 = comboBox1->Text;                   // получить
textbox->text = System::Convert::ToString(output1); // передать
return 0;
}
-----------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------
В functions.h записано:
----------------
C++
1
2
3
#pragma once
 
int calc1(void);
-----------------------------------------------------------------------------------------------------------------


Что происходит:
На этапе компиляции остановка с ошибкой:
error C2065: comboBox1: необъявленный идентификатор (для файла functions.cpp)
error C2065: textBox1: необъявленный идентификатор (для файла functions.cpp)

Вопрос: Как сделать, чтобы это работало?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2018, 21:24
Ответы с готовыми решениями:

Как передать переменную в другую форму?
Здравствуйте, пишу сюда этот вопрос, так как гугл не помог(там везде примеры/видео и ответы по C#...

Как передать данные в форму?
Всем привет! Подскажите, как из одной PHP-страницы передать данные в определенное поле формы,...

Как передать данные из формы 2 в форму 1?
Народ прошу помощи на форме1 есть 7 textBox, 2 comboBox, 1 maskedBox и 2 dat на второй форме...

Как передать данные с формы на форму др сайта?
Имеется сайт...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
10
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
28.09.2018, 22:56 2
ой, я тут тоже без году неделя, ваши библиотеки мне не знакомы... Короче, скорее всего буду фигню пороть. Попрявят - глядишь тоже чему новому научусь...

у вас в functions.cpp
C++
1
input1 = comboBox1->Text;   // получить
Если я правильно понимаю, comboBox1 - это указатель на об'ект, а где этот об'ект инициализируется?
0
Эксперт C
25582 / 15955 / 3414
Регистрация: 24.12.2010
Сообщений: 34,897
28.09.2018, 23:04 3

Не по теме:

Цитата Сообщение от Tamir64 Посмотреть сообщение
Мне 55 лет
Какой прекрасный возраст!:)

Попробуйте Form1->combox1... и так далее.
Ведь ваш calc1 вне классов...
Или сделайте его членом.
Все-таки плюсы имеют специфику... И самые простые его законы стоит изучить. Уверяю вас, это не сложно...

Добавлено через 3 минуты
Цитата Сообщение от Крашеная Посмотреть сообщение
тоже чему новому научусь...
Учитесь, учитесь, это еще никому не помешало
Инициализация здеся, имхо, ни при чем. Энтот combox1 - член класса. И вне класса, увы, не виден!
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
28.09.2018, 23:08 4
Цитата Сообщение от Байт Посмотреть сообщение
Энтот combox1 - член класса. И вне класса, увы, не виден
это в какой-то из библитек? В предложенном коде не вижу - ткинте носом, если он там, плз
0
Эксперт C
25582 / 15955 / 3414
Регистрация: 24.12.2010
Сообщений: 34,897
28.09.2018, 23:14 5
Цитата Сообщение от Крашеная Посмотреть сообщение
это в какой-то из библитек?

Не по теме:

Хорошее слова! Подарите для коллекции?:)


Это общий плюсовой закон. Простой. В методе класса все его члены видны. В других методах (функциях) надо специфицировть его принадлежность Form1->combobox1
Инкапсуляция, блин!
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
29.09.2018, 00:36 6
Цитата Сообщение от Байт Посмотреть сообщение
его принадлежность Form1->combobox1
Так и сказали бы, что это член класса Form1. В данном коде functions.cpp не видно это...

Цитата Сообщение от Байт Посмотреть сообщение
Это общий плюсовой закон. Простой..Инкапсуляция, блин!
Чего кривляться-то?
0
1 / 1 / 0
Регистрация: 15.09.2018
Сообщений: 5
29.09.2018, 10:16  [ТС] 7
Байт, благодарю за ответ, но 55 - это уже почти приговор, что касается Form1->combobox1 ничего не дает, я это уже делал. Вопрос: как сделать мою функцию calc1 членом класса, ведь подобных функций много. Если не трудно, то прошу "разжевать" на моем примере с calc1, мне хотя-бы будет от чего отталкиваться в изучении. Вопрос то еще в том, что мое изучение никто не собирается терпеть, перестройка понимаете-ли(Горбачев)!

Добавлено через 1 минуту
Крашеная, добрый день, инициируется comboBox1 в основной форме Form1.h
1
Эксперт C
25582 / 15955 / 3414
Регистрация: 24.12.2010
Сообщений: 34,897
29.09.2018, 11:35 8
Цитата Сообщение от Tamir64 Посмотреть сообщение
как сделать мою функцию calc1 членом класса,
Добавьте в Form1.h в описание класса
C++
1
int calc1();
В реализацию же функции
C++
1
2
3
4
5
6
int Form1::calc1()
{
input1 = comboBox1->Text;                   // получить
textbox->text = System::Convert::ToString(output1); // передать
return 0;
}
0
1 / 1 / 0
Регистрация: 15.09.2018
Сообщений: 5
29.09.2018, 21:58  [ТС] 9
Байт, Добрый день! Очень благодарен за ответ.
Еще несколько вопросов, если возможно, то помогите.

1) В каком месте в Form1 вставить мою функцию, объявление функции такое: int calc(int a, int b); В самой функции логика, и по результатам читаем из comboBos или пишем в textBox, а также прочее, но это не важно.
Вероятно в позицию: //TODO: добавьте код конструктора!
В эту же позицию также добавляются остальные функции?
Какой синтаксис записи, или как обычно при объявлении функции.

Собственно сам файл формы Form1.h:
Form1_h.doc

2) Какой синтаксис записи самой функции во внешнем файле functions.cpp? Необходимо ли в файл functions.cpp записать #include "Form1.h" ? Что еще дописать в подключаемых #include?

___________________________

Собственно сам файл формы functions.cpp (далее в моем примере функция описана без привязки к классу, как дописать класс, хотя Вы приводили пример, но если возможно еще раз с учетом моей конструкции):

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "Form1.h"
 
int calc(int a, int b)
{
string pozition;
    if(a > 5)
        pozition = comboBox_COMselect->Text;    //получить имя выбранного порта
 
    if(b < 10)
        textBox_SendData->Text = System::Convert::ToString(100);
 
}
___________________________

3) Какой синтаксис вызова функции из другой функции, обе они расположены во внешнем файле functions.cpp и будут входит в общий класс?

4) Какой синтаксис вызова н-р этой функции из обработчика события button?

Понятно, что для профессионала эти вопросы кажутся глупыми, но мне это крайне необходимо и непонятно. Изучением занимаюсь, но скорость познаний ниже того, что ждет руководство!
0
1 / 1 / 0
Регистрация: 15.09.2018
Сообщений: 5
01.10.2018, 12:41  [ТС] 10
неужели никто не знает, как это сделать?
0
1 / 1 / 1
Регистрация: 15.08.2010
Сообщений: 21
22.10.2018, 21:55 11
Tamir64, по-хорошему вам начать нужно с более глубокого изучения языка С++ и хотя бы паттернов проектирования. По тому что я тут увидел - вы намешали в коде и обращение к форме и математические рассчеты. Это неправильно и так никто не делает. Математические рассчеты вообще ничего не должны знать про форму, в которой отображается результат. Тут можно использовать классический паттерн "Наблюдатель" даже в упрощенном виде. Если нужно сделать "абы как", то достаточно сделать глобальную переменную типа Form1 и сделать ее видимой везде где нужно, и до кучи все элементы интерфейса сделать public. Тогда заработает без дополнительных изучений С++ и смежных тем. Но это равноценно тому, что вместо предохранителя просто жучок поставить.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2018, 21:55

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как передать данные из таблицы в форму, по клику?
Как сделать так чтобы: 1)Юзер кликает на нужной строке таблицы 2)Данные из строки по которой...

Как можно передать данные в форму, не используя ViewData и ViewBag
Здравствуйте! Возникли проблемы с типами ViewData и ViewBag. Как можно реализовать вызов методов,...

Передать форму как аргумент функции
Соб-но название темы и есть вопрос так (.h) AnsiString Text(TForm1*); получаю

Как передать форму в качестве параметра функции
В модуле создана функция Public Sub Proverka (forma1 as form) ... end sub в форме, при...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.