Сгенерировать результат диалога из пользовательского класса окна сообщения

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

Public Class MyCustomMsgBox


    Private MyForm As Form = New Form
    Private lblHeadline As Label = New Label
    Private lblMessageBody As Label = New Label
    Private btnNo As Button = New Button
    Private btnOk As Button = New Button
    Private btnYes As Button = New Button

    Public Sub New(ByVal Message As String)
        With MyForm
            .Width = 438
            .Height = 214
            .Controls.AddRange(New Control() {lblHeadline, lblMessageBody, btnNo, btnYes, btnOk})
        End With
    End Sub

    Public Shared Function ShowErrorMsg(ByVal ErrorMessage As String) As     Windows.Forms.DialogResult
        Dim obj As MyCustomMsgBox = New MyCustomMsgBox(ErrorMessage)
        obj.MyForm.ShowDialog()
    End Sub

    Public Shared function ShowSuccessMsg(ByVal SuccessMessage As String) As     Windows.Forms.DialogResult
       'some code
    End Sub

    Public Shared Function AskQuestions(ByVal Questions As String) As Windows.Forms.DialogResult
       'some code
    End Sub

    Public Shared Function ShowExceptions(ByVal ExMessage As String) As Windows.Forms.DialogResult
       'some code
    End Sub


    'Private Sub btnNo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNo.Click
    '  Windows.Forms.DialogResult.No()
    'End Sub

    End Class

Эти функции разработаны с соответствующей графикой, цветом, заголовком и заголовком.

btnOk вернет DialogResult.Ok, btnNo вернет DialogResult.No и btnYes вернет DialogResult.Yes

Как мне вернуть результат диалога с этими функциями?

Как узнать, какая кнопка нажата?

я не знаю, как обрабатывать событие нажатия кнопки в бесформенном классе.

Не могли бы вы дать мне идею?

Заранее спасибо.

СКПол


person s.k.paul    schedule 03.08.2011    source источник


Ответы (2)


Начните с легкого. Вам придется вручную подключать события с помощью AddHandler и RemoveHandler ключевые слова для этого

AddHandler btnNo.Click, AddressOf btnNo_Click

btnNo — объект кнопки. «.Click» — это событие, которое вы хотите зафиксировать. AddressOf получает указатель на функцию (по сути, он сообщает компилятору, где находится функция. Думайте об этом как о другом типе «дескрипторов».)

Вам придется удалить обработчик, когда вы закончите, сделав это.

RemoveHandler btnNo.Click, AddressOf btnNo_Click

Чтобы установить результаты диалога, форма должна быть вызвана через ShowDialog. Вы просто устанавливаете свойство DialogResults формы. Я бы сделал это в событии form.closing.

me.DialogResult = Windows.Forms.DialogResult.OK
person Andrew Neely    schedule 03.08.2011

Me.DialogResult = Windows.Forms.DialogResult.Abort
Me.Close()

и он вернет результат Abort

person aex    schedule 25.04.2014
comment
Вам не нужна строка Me.Close(). Установка для свойства DialogResult модальной формы любого значения, кроме None, закроет ее. - person LarsTech; 26.04.2014