我有一个全局方法(在模块中),多个表单正在调用。我无法弄清楚如何传递/识别调用表单,以便在方法中引用时识别它的控件:
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。
的成员
答案 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
函数返回字符串值,其中包含验证控件后生成的错误消息
如果没有错误,则函数返回Nothing
或String.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"))