运行 选项为 Strict ON 的表单上的子项
Running a sub on a form with option Strict ON
我正在尝试清理我的编码习惯,但遇到了我无法解决的问题。
在选项 strict 开启的情况下,你如何找到一个表单的实例和 运行 一个 public 子实例?
例如,在库存包中,我有一个结帐零件的快捷方式,它会发现结帐表格是否打开并且 运行s Checkout.AddID(ID 为整数)。例如:
For Each Form In Application.OpenForms
If Form.Name = "FRMCheckout" Then
Form.AddIDToList(PartID)
End If
Next
这在关闭选项严格的情况下工作正常。但是,打开它并修改它以适应,例如:
For Each Form As Windows.Forms.Form In Application.OpenForms
' If Form.Name = "FRMCheckout" Then EDIT: Dropped this in leu of this:
If TypeOf (Form) Is FRMCheckout Then
Form.AddIDToList(Ctype(PartID, Integer))
End If
Next
抛出错误(很明显),即 .AddIDToList 不是 Forms.form 的成员。
当 for 循环达到正常形式时,更改为 For Each Form as ProgramNamespace.FRMCheckout
将抛出 'Cannot cast type form to FRMcheckout'。
有什么方法可以在不关闭选项严格的情况下完成此操作?
所以我发现下面是一个解决方案,在我看来看起来更整洁:
Option Strict On
For Each Form As Windows.Forms.Form In Application.OpenForms
If TypeOf (Form) Is FRMCheckout Then
Dim Checkout_Instance As FRMCheckout = CType(Form, FRMCheckout)
Checkout_Instance.AddIDToList(PartID.ToString)
End If
Next
这有效。
寻找OfType enumerable extension,密码就是
For Each checkout In Application.OpenForms.OfType(Of FRMCheckout)()
checkout.AddIDToList(Ctype(PartID, Integer))
Next
现在循环 returns 只有 FRMCheckout 类型的形式,并且迭代器变量已经是强类型的,因此您可以调用它的 public 方法和属性而无需任何转换。当然,所有繁重的工作都是在 OfType 扩展中完成的,所以如果有任何预期的话,它并不是真正的性能改进,而是一种更清晰的编写和理解一段代码的方式
我正在尝试清理我的编码习惯,但遇到了我无法解决的问题。
在选项 strict 开启的情况下,你如何找到一个表单的实例和 运行 一个 public 子实例?
例如,在库存包中,我有一个结帐零件的快捷方式,它会发现结帐表格是否打开并且 运行s Checkout.AddID(ID 为整数)。例如:
For Each Form In Application.OpenForms
If Form.Name = "FRMCheckout" Then
Form.AddIDToList(PartID)
End If
Next
这在关闭选项严格的情况下工作正常。但是,打开它并修改它以适应,例如:
For Each Form As Windows.Forms.Form In Application.OpenForms
' If Form.Name = "FRMCheckout" Then EDIT: Dropped this in leu of this:
If TypeOf (Form) Is FRMCheckout Then
Form.AddIDToList(Ctype(PartID, Integer))
End If
Next
抛出错误(很明显),即 .AddIDToList 不是 Forms.form 的成员。
当 for 循环达到正常形式时,更改为 For Each Form as ProgramNamespace.FRMCheckout
将抛出 'Cannot cast type form to FRMcheckout'。
有什么方法可以在不关闭选项严格的情况下完成此操作?
所以我发现下面是一个解决方案,在我看来看起来更整洁:
Option Strict On
For Each Form As Windows.Forms.Form In Application.OpenForms
If TypeOf (Form) Is FRMCheckout Then
Dim Checkout_Instance As FRMCheckout = CType(Form, FRMCheckout)
Checkout_Instance.AddIDToList(PartID.ToString)
End If
Next
这有效。
寻找OfType enumerable extension,密码就是
For Each checkout In Application.OpenForms.OfType(Of FRMCheckout)()
checkout.AddIDToList(Ctype(PartID, Integer))
Next
现在循环 returns 只有 FRMCheckout 类型的形式,并且迭代器变量已经是强类型的,因此您可以调用它的 public 方法和属性而无需任何转换。当然,所有繁重的工作都是在 OfType 扩展中完成的,所以如果有任何预期的话,它并不是真正的性能改进,而是一种更清晰的编写和理解一段代码的方式