0

Я использую структуру MVC в моем приложении для форм Windows, где вся бизнес-логика для формы вычисляется в отдельном классе контроллера. Одна из проблем, с которыми я сталкиваюсь, заключается в том, что при определенных обстоятельствах в логике контроллера для формы должен отображаться Messagebox. Я пытался это сделать, создав новое исключение, которое будет обрабатываться в форме, которая будет содержать сообщение, которое будет отображаться в окне сообщения, но я недавно обнаружил, что этого, вероятно, будет недостаточно; Мне также понадобятся окна сообщений YES/NO и сообщения с разными значками. Я не думаю, что мое обычное исключение может упаковать в него такую ​​информацию. Мне сказали, что я могу увидеть некоторый успех, если вместо этого я использую структуру делегата или типа события, но я не совсем уверен, как это будет реализовано.Отображение сообщения в форме из другого класса контроллера

Любые предложения ценятся - спасибо за помощь!

ответ

2

События - ваш новый друг! Создавайте события либо в отдельных классах, либо создавайте новый класс, который разделяется между вашими классами. Я использую это для общения взад и вперед и делаю то, что я не могу сделать в своих классах данных.

В общем, создайте общее событие в этом общем классе. Затем при загрузке вашего приложения добавьте обработчик для события. Затем вы можете вызывать событие в любое время из ваших классов «контроллера».

Например, в общем классе в вашей другой библиотеке:

Public Shared Event SendMsg(ByVal sMsg As String) 

Я также создать метод в том же классе для вызова события:

Public Shared Sub SendMessage(ByVal sMessage As String) 
    RaiseEvent SendMsg(sMessage) 
End Sub 

Тогда на вашем приложении UI, где-то во время инициализации вам необходимо добавить обработчик события:

AddHandler _ClsPM.SendMsg, AddressOf ShowMessage 

Какой указывает на метод, который делает работу, когда событие поднятую:

Public Sub ShowMessage(ByVal sString As String) 
    Try 
     MsgBox(sString, MessageBoxButtons.OK, MessageBoxIcon.Error) 
    Catch ex As Exception 
     ErrorHandler(ex) 
    End Try 
End Sub 

Так что теперь, в любом месте в библиотеке, или что-нибудь, что ссылки эту библиотеку, вы можете позвонить:

[Name of your shared library].SendMessage("Hello World") 

Я использую это такой же метод получения данных или что-то еще, что мне нужно.

+0

Спасибо за помощь и быстрый ответ! Не могли бы вы привести пример того, как это сделать, или знать хорошее место, чтобы больше узнать об этом? – user2961759

+1

@ user2961759 Приведенный пример – Steve

Смежные вопросы