PowerShell的Simple GUI Inputbox如何限制整数输入并添加下拉列表
针对PowerShell GUI输入框需求的解决方案
你当前使用的[Microsoft.VisualBasic.Interaction]::InputBox是VB组件库提供的极简输入框,原生不支持输入过程格式限制、也不支持下拉列表功能,下面给出两个需求的低代码实现方案:
问题1:限制仅允许输入整数
不用修改原有输入框逻辑,新增结果校验+重新唤起逻辑即可,代码如下:
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') Add-Type -AssemblyName System.Windows.Forms $title = '输入UPC' $msg = '请输入商品UPC编码(仅允许输入整数):' do { $upc = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) # 点击取消直接退出循环 if ([string]::IsNullOrEmpty($upc)) { break } # 校验是否为整数,int64可覆盖最长13位的UPC编码取值范围 $isValid = [int64]::TryParse($upc, [ref]$null) if (-not $isValid) { [System.Windows.Forms.MessageBox]::Show("输入无效,请输入纯数字UPC编码", "输入错误") } } while (-not $isValid)
说明:该方案不需要修改输入框本身逻辑,仅通过后置校验实现限制,代码量极小,符合轻量需求。
问题2:添加简易下拉列表选项
如果需要下拉选择预设UPC,可以使用轻量的WinForm ComboBox组件实现,完整代码如下:
Add-Type -AssemblyName System.Windows.Forms # 初始化窗口 $form = New-Object System.Windows.Forms.Form $form.Text = "选择/输入UPC" $form.Size = New-Object System.Drawing.Size(300,150) $form.StartPosition = "CenterScreen" # 初始化下拉框 $comboBox = New-Object System.Windows.Forms.ComboBox $comboBox.Location = New-Object System.Drawing.Point(20,20) $comboBox.Size = New-Object System.Drawing.Size(240,20) # 按需修改预设UPC选项 $presetUpcs = @("123456789012", "234567890123", "345678901234") $comboBox.Items.AddRange($presetUpcs) # DropDown允许手动输入,改成DropDownList则仅允许选择预设值 $comboBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDown $form.Controls.Add($comboBox) # 确认按钮 $okButton = New-Object System.Windows.Forms.Button $okButton.Location = New-Object System.Drawing.Point(110,60) $okButton.Size = New-Object System.Drawing.Size(75,23) $okButton.Text = "确认" $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.AcceptButton = $okButton $form.Controls.Add($okButton) # 获取输入结果 $result = $form.ShowDialog() if ($result -eq [System.Windows.Forms.DialogResult]::OK) { $selectedUpc = $comboBox.Text }
说明:如果需要同时限制整数输入,可在获取
$selectedUpc后复用前一段的校验逻辑即可。
内容的提问来源于stack exchange,提问作者Tyler Coleman
相关产品推荐
相关产品推荐

