Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Обработка события некоторого класса в форме


Автор: Dexx 5.3.2007, 20:47
Допустим мне нужно обрабатывать события происходящие в классе, приведенном ниже.

using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsApplication7
{
    class Foo
    {
        public void MyFunction(int var)
        {         
        if ((var-2)==0)
            {
            //Вызвать событие
            }
        }
    }

}

Ну допустим я нажимаю кнопку на форме, в обработчике кнопки, что то  типа " .... .MyFunction(2);"
т.е.  вызывается событие! 
Как мне отследить его в форме.

З.Ы. Может я, что то не понятно спрашиваю?
Меня интересует что то типа  RaiseEvent из VB6, и как это обрабатывать?




Автор: Idsa 5.3.2007, 21:01
Цитата(Dexx @  5.3.2007,  20:47 Найти цитируемый пост)
Может я, что то не понятно спрашиваю?

Ага. Хотелось бы поточнее увидеть, что жмем, что нужно обрабатывать... Трудно понять все логику программы по одному методу, указанному выше.

Автор: Dexx 5.3.2007, 21:59
Не знаю как сказать!

Жмем кнопку на форме, которая вызывает функцию в классе.
И результат выпонения я получаю, ни как результат от функции!
А результат, я получаю в обработчике события некоторого класса!

Могу дать исходники, которые показывают, как это реализуется в VB6! Если это поможет!

Ну, т.е. когда объевляешь класс пишешь  With Events? 

Автор: Gelis 5.3.2007, 22:26
Цитата(Dexx @  5.3.2007,  21:59 Найти цитируемый пост)
Жмем кнопку на форме

Ну во первых если ты хочешь использовать кнопку на форме, то нужно это делать в классе производном от Form
Код

using System.Windows.Forms;
public class MainForm:Form
{
     private Button myButton;
     public MainForm()
     {
          //создаем кнопку
          myButton=new Button();
          //указываем положение верхнего правого угла
          myButton.Location=new Point(10,10);
          // задаем размер кнопки
          myButton.Size=new Size(34,15);
          //добавляем контрол в коллекцию контролов формы
          this.Controls.Add(myButton);
          //добавляем обработчик события
          myButton.Click+=new EventHandler(MyClick);
      }
      //обработчик события
      private void MyClick(object sender, EventArgs e)
      {
           //sender-объект породивший событие, т.е. наша кнопка, так что спокойно пишем
           Button local=(Button)sender;
           //e-аргумент зависящий от события, в данном случае не несет никакой смысловой нагрузки,
           //предназначен для однообразия
       }

}



Автор: bend0r 5.3.2007, 23:38
не совсем понятно чего надо, если просто как юзать события...

Код

    class Foo
    {

        public Foo()
        { 
            //где имено у тебя обработчики я так и не понел.
            //предположим что в этом классе
            Sob += One;
            Sob += Two;
        }

        //обьевляем событие.в даном случии используется встроеный делегат.
        //юзаешь какой тебе надо
        public static event EventHandler Sob;

        //твоя функция запускающая события
        public void MyFunction(int var)
        {
            if ((var - 2) == 0)
            {
                if (Sob != null)
                {
                    Sob(this, EventArgs.Empty);
                }
            }
        }

        private void One(object obj, EventArgs e)
        { 
            MessageBox.Show("первый обработчик");
        }

        private void Two(object obj, EventArgs e)
        {
            MessageBox.Show("второй");
        }
   }


в форме
Код

private void button1_Click(object sender, EventArgs e)
        {
            Foo foo = new Foo();
            foo.MyFunction(2);
        }

Автор: Naum 6.3.2007, 10:37
Цитата(bend0r @  6.3.2007,  00:38 Найти цитируемый пост)
//где имено у тебя обработчики я так и не понел.
//предположим что в этом классе

По-моему в этом и был  вопрос. Как из другого класса реагировать на события данного класса?
Dexx, если я угадал вопрос, то bend0r, впринципе ответил на него. Просто обработчики создаешь в другом классе.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)