您好。我有一个小问题,我无法弄明白:如何为表单的名称创建一个可选参数?例如,我想做这样的事情:
Private Sub Draw(ByVal Start_Pos As Point, ByVal End_Pos As Point, Optional ByVal Form_Name As Form = Cube)
End Sub
我不确定我想要的是否可能。我只知道代码不正确,因为我必须指定程序“Cube”是一个表格而不是只是一个字符串......
答案 0 :(得分:1)
如每个可选参数的Optional Parameters文档中所述,您必须将常量表达式指定为该参数的默认值。
因此,您无法使用表单实例作为可选参数的默认值。
如果您需要将表单名称设置为string
可选参数的默认值:
您可以将其中一个应用程序表单全名(包括名称空间)设置为默认值,然后使用Activator.CreateInstance
和Unwrap
对象创建该表单的实例,并使用DirectCast
把它投下来形成并稍后展示。
要创建其名称作为该参数传递的其他表单,您可以使用Activator.CreateInstance
,也可以使用包含名称和表单类型的Dictionary(Of String, Type)
或包含名称和表单实例的Dictionary(Of String, Form)
使用这个字典来获取表单实例。
答案 1 :(得分:1)
Optional params需要一个常量值。
当由于某种原因无法在设计时建立常数值时,最简单的技巧是将vaue设置为Nothing
并检查块内的值是否为空,如果是,则在执行时设置默认值。
一个例子:
Private Sub Draw(ByVal startPos As Point, ByVal endPos As Point,
Optional ByVal form As Form = Nothing)
If (form Is Nothing) Then
form = Cube
End If
' ...
End Sub
适应您所描述的真正问题:
Private Sub Draw(ByVal startPos As Point, ByVal endPos As Point,
Optional ByVal formName As String = "")
If ( String.IsNullOrEmpty(formName) ) Then
formName = Cube.Name
End If
' ...
End Sub