【问题标题】:Get DialogResult from Public Sub (Module)从公共子(模块)获取 DialogResult
【发布时间】:2014-04-05 15:05:04
【问题描述】:

我不知道要搜索什么关键字。

这是在我的应用程序中的一个模块上。

Public Sub msgYNC(ByVal result As DialogResult)
    result = MessageBox.Show("Are you sure you want to save and continue?", "RM Farms Confirmation", _
                 MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
End Sub

现在我想在表单上使用它。所以当我点击 Confirm 时:

Dim result As DialogResult
    msgYNC(result)
    If result = Windows.Forms.DialogResult.Yes Then
        'yes
    ElseIf result = Windows.Forms.DialogResult.No Then
        'n
    ElseIf result = Windows.Forms.DialogResult.Cancel Then
        'ca
    End If

但它没有返回任何东西.. 我没有得到回应。我不知道如何编码,你能找出问题所在吗?

【问题讨论】:

    标签: .net vb.net public byval


    【解决方案1】:

    解决方案应该很简单。不要在你的 Sub 中使用 byval,使用 byref

    Public Sub msgYNC(ByRef result As DialogResult)
        result = MessageBox.Show("Are you sure you want to save and continue?", 
                                 "RM Farms Confirmation", _
                                 MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
    End Sub
    

    你可以试试这个吗?

    尽管您可以使用以下结构(如果您只想在 sub-method msgYNC 中显示一个消息框)

        Select Case MessageBox.Show("", "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
            Case Windows.Forms.DialogResult.Yes
                'Do something
            Case Windows.Forms.DialogResult.No
                'Do something else
            Case Windows.Forms.DialogResult.Cancel
                'Cancel something
            Case Else
                'Do something unusefull
        End Select
    

    【讨论】:

    • 谢谢,工作。等待 5 分钟以接受答案。现在我想我知道为什么了,是不是因为 result 的值在 sub 中?
    • 没错,要记住的关键语句是:“byval”传递值(不引用对象),“byref”传递对对象及其值的引用。
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多