如何强制将SystemIcon用作参数值?

时间:2016-09-19 15:04:36

标签: vb.net

我有一个函数需要将SystemIcon作为参数传递,但是我似乎无法将SystemIcon指定为类型 - 我只能指定Icon。

ShowMessage(message As String, icon As Icon) //works

ShowMessage(message As String, icon As SystemIcon) //fails

如何强制参数类型更具体,只允许SystemIcon?

2 个答案:

答案 0 :(得分:1)

SystemIcons不是枚举。它是一个具有静态属性的类,每个属性代表一个Icon对象:

您可以在方法的开头添加代码检查,并查看您的Icon是否属于SystemIcons类中存在的任何一个。如果没有,请抛出ArgumentException

您也可以进行自己的枚举,并将其用作参数。它会在代码中拉出相应的系统Icon对象。

答案 1 :(得分:1)

要扩展Neolisk的答案,如果您使用Intellisense查看SystemIcons.Application,您会发现它属于Drawing.Icon类型。

我最近创建了一个自定义消息框,并遇到了您遇到的同一问题。我想出的解决方案包括创建一个枚举以匹配SystemIcons属性,如下所示:

Public Enum CustomMessageBoxIcon
    Application
    Asterisk
    [Error]
    Exclamation
    Hand
    Information
    Question
    Shield
    Warning
End Enum

这允许我在方法上提供Intellisense选项,以及限制它们可以发送到方法中的内容。示例如下所示:

Private Shared Function GetIconFromEnumOptions(ByVal icon As CustomMessageBoxIcon) As Icon
        Select Case icon
            Case CustomMessageBoxIcon.Application
                Return SystemIcons.Application
            Case CustomMessageBoxIcon.Asterisk
                Return SystemIcons.Asterisk
            Case CustomMessageBoxIcon.Error
                Return SystemIcons.[Error]
            Case CustomMessageBoxIcon.Exclamation
                Return SystemIcons.Exclamation
            Case CustomMessageBoxIcon.Hand
                Return SystemIcons.Hand
            Case CustomMessageBoxIcon.Information
                Return SystemIcons.Information
            Case CustomMessageBoxIcon.Question
                Return SystemIcons.Question
            Case CustomMessageBoxIcon.Shield
                Return SystemIcons.Shield
            Case CustomMessageBoxIcon.Warning
                Return SystemIcons.Warning
            Case Else
                Return SystemIcons.WinLogo
        End Select
    End Function