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

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

28.09.2018, 21:24. Показов 1597. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2018, 21:24
Ответы с готовыми решениями:

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

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

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

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

у вас в functions.cpp
C++
1
input1 = comboBox1->Text;   // получить
Если я правильно понимаю, comboBox1 - это указатель на об'ект, а где этот об'ект инициализируется?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
28.09.2018, 23:04

Не по теме:

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

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

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

Не по теме:

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


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

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

Добавлено через 1 минуту
Крашеная, добрый день, инициируется comboBox1 в основной форме Form1.h
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
29.09.2018, 11:35
Цитата Сообщение от 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  [ТС]
Байт, Добрый день! Очень благодарен за ответ.
Еще несколько вопросов, если возможно, то помогите.

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  [ТС]
неужели никто не знает, как это сделать?
0
1 / 1 / 1
Регистрация: 15.08.2010
Сообщений: 21
22.10.2018, 21:55
Tamir64, по-хорошему вам начать нужно с более глубокого изучения языка С++ и хотя бы паттернов проектирования. По тому что я тут увидел - вы намешали в коде и обращение к форме и математические рассчеты. Это неправильно и так никто не делает. Математические рассчеты вообще ничего не должны знать про форму, в которой отображается результат. Тут можно использовать классический паттерн "Наблюдатель" даже в упрощенном виде. Если нужно сделать "абы как", то достаточно сделать глобальную переменную типа Form1 и сделать ее видимой везде где нужно, и до кучи все элементы интерфейса сделать public. Тогда заработает без дополнительных изучений С++ и смежных тем. Но это равноценно тому, что вместо предохранителя просто жучок поставить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2018, 21:55
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Использование 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