powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как подписаться на событие
5 сообщений из 5, страница 1 из 1
Как подписаться на событие
    #38546316
Snak2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, стоит задача при нажатии на кнопку формы с генерировать событие и отреагировать на него в другом классе. Событие я вроде сгенерировал правильно а вот подписаться на него не могу пожалуйста подскажите как надо правильно это реализовать.

Код формы
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public interface IMainWindow 
    {
        string FolderPatch { get;}
        event EventHandler OpenFileDialog;
    }
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, IMainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        public string FolderPatch
        {
            get { return textBox1.Text; }
        }
 
        public event EventHandler OpenFileDialog;
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            if (OpenFileDialog != null) OpenFileDialog(this, EventArgs.Empty);
        }
    }



Класс который должен отреагировать на событие
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class MyClass
    {
        private readonly IMainWindow _view;
 
        public MainPresentor(IMainWindow view)
        {
            _view = view;
            _view.OpenFileDialog += new EventHandler(_view_OpenFileDialog);
        }
 
        void _view_OpenFileDialog(object sender, EventArgs e)
        {
            //код
        }
    }
...
Рейтинг: 0 / 0
Как подписаться на событие
    #38546321
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snak2013,

Да вроде все правильно.
Может вы забыли экземпляр класса (MyClass) создать?

Где он у вас существует?
...
Рейтинг: 0 / 0
Как подписаться на событие
    #38546326
Snak2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да вот в этом то и вся проблема я это сам недавно заметил я действительно не вызывал его но и как вызвать тоже не знаю пытался вызвать при инициализации формы
Код: c#
1.
2.
3.
4.
5.
6.
public MainWindow()
        {
            InitializeComponent();
            MainWindow window = new MainWindow();
            MyClass MP = new MyClass(window);
        }



Но при этом форма пытается долго запуститься и в итоге получаю исключение. Не знаю в какой момент надо вызывать конструктор да и не уверен что параметр передаю правильно хотя компилятор не ругается на это.
...
Рейтинг: 0 / 0
Как подписаться на событие
    #38546331
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snak2013как вызвать тоже не знаю пытался вызвать при инициализации формы
Код: c#
1.
2.
3.
4.
5.
6.
public MainWindow()
{
    InitializeComponent();
    MainWindow window = new MainWindow();
    MyClass MP = new MyClass(window);
}


Посмотри внимательно что ты делаешь. Находясь в конструкторе ты снова создаешь экземпляр своего класса получая бесконечную рекурсию. Тебе всего лишь нужно сослаться на текущий экземпляр класса. Следовательно нужно использовать ключевое слово this.
Код: c#
1.
2.
3.
4.
5.
public MainWindow()
{
    InitializeComponent();
    MyClass MP = new MyClass(this);
}
...
Рейтинг: 0 / 0
Как подписаться на событие
    #38546334
Snak2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile Спасибо вот теперь действительно все работает
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как подписаться на событие
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]