vb.net - 为什么 Me.Controls.OfType 在 VB.NET 中不起作用?
问题描述
我正在使用 .NET Framework 4.7.2 作为参考。
我Me.Controls.OfType
在表单中的事件中使用自动句柄。
Sub AddTextBoxes_TextChanged()
Dim textboxes = Me.Controls.OfType(Of TextBox)()
Console.WriteLine(textboxes.Count)
For Each txt In textboxes
AddHandler txt.TextChanged, AddressOf AllTextBoxes_TextChanged
Next
End Sub
Private Sub SampleForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddTextBoxes_TextChanged()
End Sub
Private Sub AllTextBoxes_TextChanged(sender As Object, e As EventArgs)
' ...
End Sub
但是, For 循环不起作用,所以我检查了 with 内是否有实际的文本框textboxes
控件Console.WriteLine(textboxes.Count)
。嗯,结果是0
。我在表单设计中多次检查了文本框,它们存在。为什么不起作用Controls.OfType(Of TextBox)()
?
解决方案
将您的处理程序放在表单的代码中。在设计视图中选择文本框之一。在“属性”窗口中选择闪电以显示所有可用的事件TextBox
。选择 TextChanged 事件和下拉框箭头。AllTextBoxes_TextChanged
由于签名匹配,您的方法将被列出。选择您的方法,Handles 代码将添加到方法中。对您希望使用此方法的每个文本框执行相同操作。
当然,您始终可以键入扩展的 Handles 子句。
但是,我看不出您的代码有什么问题。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim textboxes = Controls.OfType(Of TextBox)() '.ToList
For Each txt In textboxes
AddHandler txt.TextChanged, AddressOf AllTextBoxes_TextChanged
Next
End Sub
Private Sub AllTextBoxes_TextChanged(sender As Object, e As EventArgs)
Dim tb = DirectCast(sender, TextBox)
MessageBox.Show($"The text changed event fired by {tb.Name}")
End Sub
为我工作。
推荐阅读
- r - 在使用 for 循环在列表中定义的数据框中删除列
- docker - 更新 Discourse 后如何解决 502 Bad Gateway 问题?
- linux - Linux 串行驱动程序接收
- ios - MGLUserLocationAnnotationView 子类不采用相机的俯仰视角
- bash - 从 csv 构建 Json 的 JQ 语句
- c# - C# TcpClient - 客户端确定远程服务器是否正常关闭连接的最佳方法是什么?
- mybatis - 在mybatis框架中解析带有package作为子标签的typeAliases标签时,会出现解析错误。我使用jdk9作为开发环境
- python - 如何将数据框列中的多个句子组合成 Python 中的单个元素列表
- xamarin - 为什么我的 Xamarin 表单自定义编辑器渲染器不执行任何操作
- pine-script - 较低的时间范围