Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вызов функции за пределами класса Form1 
:(
    Опции темы
40grad
Дата 3.5.2007, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Доброй ночи. 

Имеется Windows Forms Application.  На форме стоит textBox. В классе Form1 я дописал public-функцию somefunc() , которая должна выводить какой-либо текст на textBox.

И необходимо вызвать функцию somefunc() за переделами класса, т.е., например, из функции main. 

Если написать так:
Form1->testfunc(); - то компилятор ругается на синтаксические ошибки.

Собственно, а как тогда правильно надо вызывать функцию testfunc? 
PM MAIL   Вверх
archeg
Дата 3.5.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 9
Всего: 27



Уже очень часто спрашивали, лучший вариант - поиск или купить книгу по шарпу )

Тут все есть: http://forum.vingrad.ru/topic-52713.html


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
adLucem
Дата 3.5.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 17.4.2007
Где: Украина, Донецк

Репутация: нет
Всего: 5



  • В C# нет оператор ->
  • Для того чтобы осуществлять вызов функции от имени класса необходимо объявить ее как статическую функцию (что в данном случае врядли возможно).
  • Перед тем как вызывать функцию - член класса, необходимо создать объект класса, от имени которого осуществляется вызов.
Пример:
Код

Form1 form = new Form1 ( );
form.testfunc ( );



Это сообщение отредактировал(а) adLucem - 3.5.2007, 10:13
PM MAIL ICQ   Вверх
40grad
Дата 3.5.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Но я пишу на C++, а примеры мне попадались, в основном, на шарпе. 

Тут я где-то видел, как на C++ обратиться к форме из другого класса. А мне нужно не из класса, а из другой функции.


Если не трудно, напишите, пожалуйста, как из функции main вызвать testfunc() на C++

Кусок кода из Form1.h
Код

public: System::Void testfunc(void) {
                textBox1->Text = "testfunc works!";
                timer1->Start();
            }



Код

int main(array<System::String ^> ^args)
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // Create the main window and run it
    Application::Run(gcnew Form1());
    




    return 0;
}

PM MAIL   Вверх
adLucem
Дата 3.5.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 17.4.2007
Где: Украина, Донецк

Репутация: нет
Всего: 5



Код

#include "stdafx.h"
#include "Form1.h"

using namespace Test;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // Создаем объект формы
    Form1 ^ form = gcnew Form1();

    // Делаем вызов интересующих функций
    form->testfunc ();

    //Запускаем приложение с созданной формой
    Application::Run( form );
    return 0;
}

PM MAIL ICQ   Вверх
40grad
Дата 3.5.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Cпасибо!

А если не из функции main, а из другой, то как?


Эта функция вызывается в процессе работы приложения, причем нельзя ей передавать других аргументов, кроме этих двух и также нельзя менять тип возвращаемого значения
Код

void stereocallback(IplImage * img1, IplImage * img2) 
        {
            
            System::Drawing::Bitmap^ bmp2 = IplToBitmap(img1);
            //отсюда надо вызвать pictureBoxSetPic(bmp2), которая определена в классе Form1    
            
        }



PM MAIL   Вверх
adLucem
Дата 3.5.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 17.4.2007
Где: Украина, Донецк

Репутация: нет
Всего: 5



  • Вариант 1 (предпочтительный): В классе, в котором реализована используется функция stereocallback объявить атрибут Form1 form, инициализировать его при создании экземпляра класса и тогда функция ссможет свободно обращаться к этому атрибуту.

    Код

    void stereocallback ( IplImage *img1, IplImage *img2) {
                
        System::Drawing::Bitmap^ bmp2 = IplToBitmap(img1);
        //form->...    
        }

    private:
        Form1 form;

  • Вариант 2 (сложный): Использовать Singleton [Гамма Э. Шаблоны проектирования] (а лучше Registry [Фаулер М. Шаблоны проектирования корпоративных систем] с областью видимости на уровне потоков)


Это сообщение отредактировал(а) adLucem - 3.5.2007, 13:34
PM MAIL ICQ   Вверх
40grad
Дата 11.5.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Дело в том, что функция stereocallback вызывается не из моего кода и не является членом какого-либо класса

cvcamSetProperty(1, CVCAM_STEREO_CALLBACK, stereocallback); - вот в этой строчке я указываю, что функция stereocallback будет вызываться при определенном событии. 

Пробовал определить дополнительный класс, который бы имел доступ к классу Form1 и с помощью него функция stereocallback могла бы обращаться к полям формы, но возникает та же проблема - как сообщить функции stereocallback о том, что существует такой класс? Ведь параметров больше передавать никаких в нее нельзя.  

Может быть есть еще какое-нибудь решение?
PM MAIL   Вверх
Exception
Дата 12.5.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 5
Всего: 186



Цитата(40grad @  11.5.2007,  21:52 Найти цитируемый пост)
Дело в том, что функция stereocallback вызывается не из моего кода и не является членом какого-либо класса


Простите, как это не является членом класса?
PM   Вверх
40grad
Дата 12.5.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Ну она описана в отдельном файле 

void stereocallback( .... )
{ ..... }

может я и чего перепутал, но по-моему при таком описании она не принадлежит никакому классу


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.