如何在ADUC替换表单的验证函数中动态引用哈希表?
解决动态引用$formField对应字段的问题
要让TestPhoneNumberValid函数能复用在多个电话字段上,核心是让函数通过$this(触发事件的输入控件)找到$formField中对应的条目,避免硬编码字段名。这里提供两种简洁的实现方式:
方法1:利用控件的Tag属性存储字段名
WinForms控件自带的Tag属性可存储自定义关联数据,我们可以把$formField中的字段名(比如IPPhone)存在这里,让函数动态获取对应条目:
步骤1:绑定事件前给控件设置Tag
# IPPhone字段设置Tag并绑定事件 $formField.IPPhone.Field.Tag = "IPPhone" $formField.IPPhone.Field.Add_TextChanged({ TestPhoneNumberValid }) # 其他电话字段(比如HomePhone)同理 $formField.HomePhone.Field.Tag = "HomePhone" $formField.HomePhone.Field.Add_TextChanged({ TestPhoneNumberValid })
步骤2:修改验证函数实现动态引用
function TestPhoneNumberValid { # 通过Tag获取字段名,定位$formField中的目标条目 $targetField = $formField.$($this.Tag) if ($this.MaskCompleted -eq $true -or ($this.Text -replace '\s','').Length -eq 3 ) { $targetField.Validated = $true $targetField.Info.Text = "" } else { $targetField.Info.Text = "Phone number is not in a valid format of (555) 555-5555" } }
方法2:通过事件参数传递上下文(可选)
如果不想依赖Tag属性,也可以在绑定事件时直接把对应字段作为参数传给函数:
# 绑定IPPhone字段的事件,传入对应字段 $formField.IPPhone.Field.Add_TextChanged({ TestPhoneNumberValid -TargetField $formField.IPPhone }) # 函数接收参数并处理 function TestPhoneNumberValid { param( [Parameter(Mandatory=$true)] $TargetField ) if ($this.MaskCompleted -eq $true -or ($this.Text -replace '\s','').Length -eq 3 ) { $TargetField.Validated = $true $TargetField.Info.Text = "" } else { $TargetField.Info.Text = "Phone number is not in a valid format of (555) 555-5555" } }
两种方法都能实现函数复用:方法1更简洁,适合批量处理多个字段;方法2参数更明确,可读性更高。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

