我有一个函数需要将SystemIcon作为参数传递,但是我似乎无法将SystemIcon指定为类型 - 我只能指定Icon。
ShowMessage(message As String, icon As Icon) //works
ShowMessage(message As String, icon As SystemIcon) //fails
如何强制参数类型更具体,只允许SystemIcon?
答案 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