Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121

Реализация паттерна MVP в Windows Forms

14.09.2016, 18:51. Показов 2865. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! В приложении пробую реализовать MVP. Есть несколько форм, класс Presenter и класс Model. При клике на кнопку в форме, делаю проброс события в Presenter, но он почему-то не видит передачу события SaveCustomerClick. В чем может быть дело?

Код формы:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
namespace Tour
{
    public interface ICustomerInsertForm
    {
        string fio { get; set; }
        string adress { get; set; }
        string phone { get; set; }
        DateTime BirthDate { get; set; }
        event EventHandler SaveCustomerClick;
    }
 
    public partial class CustomerInsertForm : Form, ICustomerInsertForm
    {
        public CustomerInsertForm()
        {
            InitializeComponent();
            butSaveCustomer.Click += new EventHandler(ButSaveCustomer_Click);
        }
 
        #region Проброс событий
        private void ButSaveCustomer_Click(object sender, EventArgs e)
        {
            if (SaveCustomerClick != null) SaveCustomerClick(this, EventArgs.Empty);
        }
        #endregion
 
        #region ICustomerInsertForm
        public string fio
        {
            get { return fioTextBox.Text; }
            set { fioTextBox.Text = value; }
        }
        public string adress
        {
            get { return adressTextBox.Text; }
            set { adressTextBox.Text = value; }
        }
 
        public string phone
        {
            get { return phoneTextBox.Text; }
            set { phoneTextBox.Text = value; }
        }
 
        public DateTime BirthDate
        {
            get { return birth_date.Value; }
            set { birth_date.Value = value; }
        }
        
        public event EventHandler SaveCustomerClick;
        #endregion
    }
}
Код Presenter:

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
namespace Tour
{
    public class MainPresenter
    {
        private readonly IMainForm _main;
        private readonly ICustomerForm _cust;
        private readonly ICustomerInsertForm _view;
        private readonly IFileManager _manager;
        private readonly IMessageService _messageService;
 
        public MainPresenter(IMainForm main, ICustomerForm cust, ICustomerInsertForm view, IFileManager manager, IMessageService messageService)
        {
            _main = main;
            _cust = cust;
            _view = view;
            _manager = manager;
            _messageService = messageService;
            _view.SaveCustomerClick += _view_SaveCustomerClick;
        }
 
        void _view_SaveCustomerClick(object sender, EventArgs e)
        {
            MessageBox.Show("Добавлен");
        }
    }
}
Добавлено через 1 час 10 минут
Код срабатывает, если в проекте одна форма, а если формы вызываются одна из другой, то Presenter почему-то не может поймать событие из дочерней формы
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.09.2016, 18:51
Ответы с готовыми решениями:

Несколько Windows Forms в приложении со структурой MVP
Добрый день! Помогите решить следующую задачу. Пишу для себя приложение для работы с товарами. Перечитав кучу материала в интернете, выбрал...

События модели в реализации паттерна MVP
Всем привет! Подскажите, пожалуйста, возможно ли, чтобы Model (в паттерне MVP) дергала свои события, которые будут выполнять методы View...

Простой секундомер с использованием паттерна MVP
Приветствую! Задача состоит в следующем: Создайте программу секундомер. Требуется выводить показания секундомера в окне. Окно имеет...

4
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
15.09.2016, 03:32
Паттерн MVP для WinForms

Чудо поиск). Только обсуждали.
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
15.09.2016, 05:16  [ТС]
Там не разбирается случай, когда несколько форм

Добавлено через 25 минут
вернее тема затрагивается, но что делать, не понятно
0
 Аватар для Serg34
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
15.09.2016, 10:10
Green01, Видимо все дело в вызове дочерней формы. В Вашем коде презентер не знает ни о каких дочерних формах, напишите код вызова дочерней формы.

Добавлено через 5 минут
И еще!
В Вашем коде самого главного нет - модели.
Все данные (фио, телефон и т.д.) хранятся именно в ней. Именно модель - описание реального объекта. Вид - это лишь представление этих данных в удобочитаемой форме потребителю приложения.
И имена свойств с большой буквы надо писать)
Здесь есть простой пример MVP
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
15.09.2016, 10:13
Green01, попробуй убрать readonly из объявления форм.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.09.2016, 10:13
Помогаю со студенческими работами здесь

Реализация вероятности в Windows Forms
Здравствуйте. Делаю имитационную модель по задаче: "Собранные телевизионные приемники после сборки проходят испытания на станции...

Реализация паттерна MVC
Доброго времени суток. Допустим у меня есть класс Database в котором 2 метода: class Database { public OleDbConnection...

Реализация паттерна MVVM
Добрый день, форумчане. Ни разу не пользовался данным паттерном программирования, прочитал уже кучу статей, но ни одна из них не может мне...

Реализация паттерна состояние
Парни, кто шарит, помогите реализовать паттерн. "Игра перемещение по лабиринту". Как можно проще.

Реализация паттерна Singleton
Добрый день. Необходимо реализовать класс Storage, объект которого будет единственным в программе. Для достижения данной цели было выбрано...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Перейдите по ссылке:. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
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 будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru