You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:01:07