Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2011, 20:27   #1
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию как пользоваться System::EventHandler

есть ел-т windows forms нужно обработать клик насколько я понял это можно сделать с помощью System::EventHandler что должно быть во втором аргументе? есть ли другие способы?

зы читал мсдн ни чего не понял
ololo-schoolboy вне форума Ответить с цитированием
Старый 05.01.2011, 23:26   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Чтобы обработать событие Click можно щелкнуть по компоненту в дизайнере,перейти на вкладку Events и дважды щелкнуть в строке Click.
Если же хочешь подцепить свой метод к событию через EventHandler, то для клика будет так:
Код:
public Form1()
        {
            InitializeComponent();
            this.Click+=new EventHandler(My_Func);
        }
        public void My_Func(object sender, EventArgs e)
        {

        }
По сути это делегат,поэтому чтобы "цеплялось" надо,чтобы аргументы события(функции) совпадали с аргументами твоего метода.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 06.01.2011, 13:29   #3
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

сори не уточнил надо в c++ как через конструктор понятно, а в коде не понимаю и еще вопрос можно ли цеплять функции которые не являются методами класса?
ololo-schoolboy вне форума Ответить с цитированием
Старый 06.01.2011, 14:10   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Цитата:
можно ли цеплять функции которые не являются методами класса?
Да,можно,главное,чтобы у функций были одинаковые аргументы.
Насчет того,как это должно выглядеть в с++...
Не пользовался,не знаю,возможно это будет так:
Код:
My_Func += gcnew EventHandler(this, &YourFormClass::Form1_Click);
Хотя... Абсолютно в этом не уверен. Если не получится,то лучше попросить админов перенести тему в раздел с С++.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 06.01.2011, 17:21   #5
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

просто по идее первый аргумент это указатель на экземпляр, а второй это указатель на метод, класса экземпляром которого является первый
если я сделаю так:
Код:
class MyClass{
public: MyClass(){/*бла-бла*/}
public: void MyFunc(){/*бла-бла*/}
};
а потом так:
Код:
Click += gcnew System::EventHandler(&My1, &MyClass::MyFunc);
то он мне напишет:
Цитата:
error C3364: System::EventHandler: недопустимый аргумент для конструктора делегата; целевой объект делегата должен быть указателем на функцию-член
а если так:
Код:
void (MyClass::*pMyFunc)()=&MyClass::MyFunc;
(My1.*(pMyFunc))();
то все ок
ololo-schoolboy вне форума Ответить с цитированием
Старый 07.01.2011, 00:34   #6
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Цитата:
void (MyClass::*pMyFunc)()=&MyClass::MyF unc;
(My1.*(pMyFunc))();
Мммм...я бы написал так(если без классов):
Код:
void InitializeComponent(void)
		{
			this->SuspendLayout();
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(292, 266);
			this->Name = L"Form1";
			this->Text = L"Form1";
			this->Click+=gcnew System::EventHandler(this,&Form1::My_Func);
			this->ResumeLayout(false);

		}

public: void My_Func(System::Object^  sender, System::EventArgs^  e)
			{
				this->Text="dfsfsdf";
			}
Вот и все..Обрабатывай до упора этот клик сколько угодно раз. Что неясно?..
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 07.01.2011, 13:48   #7
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Цитата:
я бы написал так
ну с помощью визарда я тоже могу =)
Цитата:
void (MyClass::*pMyFunc)()=&MyClass::MyF unc;
(My1.*(pMyFunc))();
это не чтоб обработать клик, а чтоб показать что это указатель на функцию-член

Цитата:
Что неясно?..
1)какой нахрен указатель он от меня хочет
2)
Цитата:
EventHandler(&My1, &MyClass::MyFunc);
Цитата:
EventHandler(this,&Form1::My_Func);
- десять отличий в студию =)
ololo-schoolboy вне форума Ответить с цитированием
Старый 08.01.2011, 16:35   #8
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

люди а - уууу...!
ololo-schoolboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SynEdit - как пользоваться? DimOn4Ik Компоненты Delphi 17 28.01.2011 04:06
Как пользоваться ComboBox ByFly Общие вопросы Delphi 2 07.12.2010 14:35
EventHandler C# Pti44ka Помощь студентам 0 04.04.2010 13:53
Как пользоваться динамическим IP? WinFasT Свободное общение 2 19.01.2010 09:00
Как пользоваться audiolab? Anfall Мультимедиа в Delphi 2 20.02.2009 15:06