传递给sub的可选表单的name参数

时间:2015-12-22 23:38:12

标签: vb.net winforms

您好。我有一个小问题,我无法弄明白:如何为表单的名称创建一个可选参数?例如,我想做这样的事情:

    Private Sub Draw(ByVal Start_Pos As Point, ByVal End_Pos As Point, Optional ByVal Form_Name As Form = Cube)


    End Sub


我不确定我想要的是否可能。我只知道代码不正确,因为我必须指定程序“Cube”是一个表格而不是只是一个字符串......

2 个答案:

答案 0 :(得分:1)

如每个可选参数的Optional Parameters文档中所述,您必须将常量表达式指定为该参数的默认值。

因此,您无法使用表单实例作为可选参数的默认值。

如果您需要将表单名称设置为string可选参数的默认值:

您可以将其中一个应用程序表单全名(包括名称空间)设置为默认值,然后使用Activator.CreateInstanceUnwrap对象创建该表单的实例,并使用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