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

如何实现PowerShell WinForms计算器无需重启即可重复输入计算?

解决PowerShell WinForms ABC Pattern Calculator重复输入计算的问题

你的问题核心是脚本执行单次计算后就终止会话或关闭窗口,只需调整WinForms的事件逻辑,让窗口持续运行,且计算按钮可重复触发、每次读取最新输入值即可实现同会话重复计算。

关键修改思路

  1. 用ShowDialog()维持窗口模态运行,直到用户主动关闭
  2. 计算按钮的Click事件每次触发时,重新读取输入框的当前值
  3. 加入输入合法性验证,避免非数字输入报错
  4. 可选添加输入框清空逻辑,方便重复输入

完整实现代码

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 创建主窗体
$mainForm = New-Object System.Windows.Forms.Form
$mainForm.Text = "ABC Pattern Calculator"
$mainForm.Size = New-Object System.Drawing.Size(400, 300)
$mainForm.StartPosition = "CenterScreen"

# 创建标签页容器
$tabControl = New-Object System.Windows.Forms.TabControl
$tabControl.Dock = "Fill"

# ---------------------- 看涨模式标签页 ----------------------
$bullishTab = New-Object System.Windows.Forms.TabPage("Bullish Pattern")

# 输入控件
$labelA_Bull = New-Object System.Windows.Forms.Label
$labelA_Bull.Text = "Point A:"
$labelA_Bull.Location = New-Object System.Drawing.Point(20, 20)
$inputA_Bull = New-Object System.Windows.Forms.TextBox
$inputA_Bull.Location = New-Object System.Drawing.Point(100, 20)
$inputA_Bull.Size = New-Object System.Drawing.Size(200, 20)

$labelB_Bull = New-Object System.Windows.Forms.Label
$labelB_Bull.Text = "Point B:"
$labelB_Bull.Location = New-Object System.Drawing.Point(20, 60)
$inputB_Bull = New-Object System.Windows.Forms.TextBox
$inputB_Bull.Location = New-Object System.Drawing.Point(100, 60)
$inputB_Bull.Size = New-Object System.Drawing.Size(200, 20)

$labelC_Bull = New-Object System.Windows.Forms.Label
$labelC_Bull.Text = "Point C:"
$labelC_Bull.Location = New-Object System.Drawing.Point(20, 100)
$inputC_Bull = New-Object System.Windows.Forms.TextBox
$inputC_Bull.Location = New-Object System.Drawing.Point(100, 100)
$inputC_Bull.Size = New-Object System.Drawing.Size(200, 20)

# 计算按钮
$calcBtn_Bull = New-Object System.Windows.Forms.Button
$calcBtn_Bull.Text = "Calculate Point D"
$calcBtn_Bull.Location = New-Object System.Drawing.Point(20, 140)
$calcBtn_Bull.Size = New-Object System.Drawing.Size(280, 30)

# 结果显示
$resultLabel_Bull = New-Object System.Windows.Forms.Label
$resultLabel_Bull.Text = "Point D:"
$resultLabel_Bull.Location = New-Object System.Drawing.Point(20, 180)
$resultLabel_Bull.AutoSize = $true

# 看涨模式计算逻辑(替换为你的实际运算公式)
$calcBtn_Bull.Add_Click({
    if ([double]::TryParse($inputA_Bull.Text, [ref]$a) -and 
        [double]::TryParse($inputB_Bull.Text, [ref]$b) -and 
        [double]::TryParse($inputC_Bull.Text, [ref]$c)) {
        $d = $a + ($b - $c) * 1.618 # 示例公式,按需修改
        $resultLabel_Bull.Text = "Point D: $($d.ToString('N4'))"
        # 可选:清空输入框方便下次输入
        # $inputA_Bull.Text = ""
        # $inputB_Bull.Text = ""
        # $inputC_Bull.Text = ""
    } else {
        $resultLabel_Bull.Text = "Point D: 输入无效,请输入数字"
    }
})

# 将控件添加到看涨标签页
$bullishTab.Controls.AddRange(@($labelA_Bull, $inputA_Bull, $labelB_Bull, $inputB_Bull, $labelC_Bull, $inputC_Bull, $calcBtn_Bull, $resultLabel_Bull))

# ---------------------- 看跌模式标签页 ----------------------
$bearishTab = New-Object System.Windows.Forms.TabPage("Bearish Pattern")

# 输入控件
$labelA_Bear = New-Object System.Windows.Forms.Label
$labelA_Bear.Text = "Point A:"
$labelA_Bear.Location = New-Object System.Drawing.Point(20, 20)
$inputA_Bear = New-Object System.Windows.Forms.TextBox
$inputA_Bear.Location = New-Object System.Drawing.Point(100, 20)
$inputA_Bear.Size = New-Object System.Drawing.Size(200, 20)

$labelB_Bear = New-Object System.Windows.Forms.Label
$labelB_Bear.Text = "Point B:"
$labelB_Bear.Location = New-Object System.Drawing.Point(20, 60)
$inputB_Bear = New-Object System.Windows.Forms.TextBox
$inputB_Bear.Location = New-Object System.Drawing.Point(100, 60)
$inputB_Bear.Size = New-Object System.Drawing.Size(200, 20)

$labelC_Bear = New-Object System.Windows.Forms.Label
$labelC_Bear.Text = "Point C:"
$labelC_Bear.Location = New-Object System.Drawing.Point(20, 100)
$inputC_Bear = New-Object System.Windows.Forms.TextBox
$inputC_Bear.Location = New-Object System.Drawing.Point(100, 100)
$inputC_Bear.Size = New-Object System.Drawing.Size(200, 20)

# 计算按钮
$calcBtn_Bear = New-Object System.Windows.Forms.Button
$calcBtn_Bear.Text = "Calculate Point D"
$calcBtn_Bear.Location = New-Object System.Drawing.Point(20, 140)
$calcBtn_Bear.Size = New-Object System.Drawing.Size(280, 30)

# 结果显示
$resultLabel_Bear = New-Object System.Windows.Forms.Label
$resultLabel_Bear.Text = "Point D:"
$resultLabel_Bear.Location = New-Object System.Drawing.Point(20, 180)
$resultLabel_Bear.AutoSize = $true

# 看跌模式计算逻辑(替换为你的实际运算公式)
$calcBtn_Bear.Add_Click({
    if ([double]::TryParse($inputA_Bear.Text, [ref]$a) -and 
        [double]::TryParse($inputB_Bear.Text, [ref]$b) -and 
        [double]::TryParse($inputC_Bear.Text, [ref]$c)) {
        $d = $a - ($c - $b) * 1.618 # 示例公式,按需修改
        $resultLabel_Bear.Text = "Point D: $($d.ToString('N4'))"
        # 可选:清空输入框方便下次输入
        # $inputA_Bear.Text = ""
        # $inputB_Bear.Text = ""
        # $inputC_Bear.Text = ""
    } else {
        $resultLabel_Bear.Text = "Point D: 输入无效,请输入数字"
    }
})

# 将控件添加到看跌标签页
$bearishTab.Controls.AddRange(@($labelA_Bear, $inputA_Bear, $labelB_Bear, $inputB_Bear, $labelC_Bear, $inputC_Bear, $calcBtn_Bear, $resultLabel_Bear))

# 组装窗体并运行
$tabControl.TabPages.AddRange(@($bullishTab, $bearishTab))
$mainForm.Controls.Add($tabControl)
$mainForm.ShowDialog() | Out-Null

使用说明

  1. 替换代码中的看涨/看跌模式计算公式为你实际需要的算术逻辑
  2. 运行脚本后,窗口会保持打开状态,每次输入新数值后点击计算按钮即可得到结果
  3. 如需快速清空输入框,可取消注释代码中对应的清空语句

内容的提问来源于stack exchange,提问作者spaceibiza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:05:25