2011-08-03 68 views
2

对话的结果我开发一个自定义MessageBox类,如以下各项生成自定义消息框类

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

我如何返回与这些功能的对话框结果?

我如何知道哪个按钮被按下?

我不知道如何处理无形类中的按钮单击事件。

你能告诉我这个想法吗?

预先感谢您。

SKPaul

回答

1

从容易开始。你将不得不使用AddHandler and 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 
+0

哇,它为我工作。你简直太棒了。非常感谢。 –

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

,它会返回结果中止

+0

您不需要'Me.Close()'行。将模态窗体的DialogResult属性设置为None而不是None会关闭它。 – LarsTech