识别正在调用方法的表单

时间:2014-11-13 21:12:17

标签: vb.net winforms visual-studio methods parameter-passing

我有一个全局方法(在模块中),多个表单正在调用。我无法弄清楚如何传递/识别调用表单,以便在方法中引用时识别它的控件:

Public Sub SomeFunction(callingForm As Form)
    callingForm.ErrorProvider.SetError(TextBox1, "Faux pas!")
End Sub

Public Sub SomeOtherFunction(callingForm As Form)
    SomeFunction(Me)
End Sub

我在上面的例子中,我试图将表单作为参数传递,但我被告知:

  

ErrorProvider不是System.Windows.Forms.Form。

的成员

2 个答案:

答案 0 :(得分:1)

这很常见,想要将所有表单都视为相同但又不同。您将需要创建每个表单可以实现的另一个类。这允许你做一些具体的事情......一般来说。

创建一个类似于此的类,调用它和函数,无论你想要什么:

Public Interface IErrorForm
    Sub MyValidate
End Interface

在表单中实现:

Public Class Form1
    Implements IErrorForm

Public Sub MyValidate() Implements IErrorForm.MyValidate
    '...Your code here
    'TextBox1.Text = "Faux pas!"
End Sub

现在,无论你想在哪里调用这个函数,都可以这样做:

Public Sub SomeFunction(callingForm As Form)
    If GetType(IErrorForm).IsAssignableFrom(xFrm.GetType) Then
        CType(xFrm, IErrorForm).MyValidate()
    End If
End Sub

答案 1 :(得分:0)

Validate函数返回值的另一种方法 正如您在评论中提到的那样

  

...我的方法的一个关键目的是避免必须设置   方法之外的错误,以减少双重代码

根据我的理解,您需要Validate功能检查,给定控制作为参数,错误并通过ErrorProvider显示错误消息。 我的建议将是共享Validate函数返回字符串值,其中包含验证控件后生成的错误消息 如果没有错误,则函数返回NothingString.Empty

Public Function Validate(ctrl As Object, formats As String) As String
    Dim errorMessage As String = Nothing 'or String.Empty
    ' Your validating code here
    ' If no error errorMessage = Nothing
    Return errorMessage         
End Function

然后在表单中(可能在Validated事件处理程序中)

'....
Me.MyErrorprovider.SetError(Me.MyTextBox, 
                            MyGlobalFunctions.Validate(Me.MyTextBox, "formats"))