代码之家  ›  专栏  ›  技术社区  ›  Christopher Cass

创建Powershell表单,其中按钮将文本转换为语音

  •  1
  • Christopher Cass  · 技术社区  · 2 年前

    我正在尝试在PowerShell中结合两种我没有经验的东西。创建一个表单和文本到语音。对于文本到语音,我已经验证了这将与我对话:

    Add-Type -AssemblyName System.speech
    
    $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
    $speak.Speak('My test speech')
    

    在我的谷歌搜索中,我发现了一些关于创建文本框的信息。例如,这将创建一个只有取消按钮的框:

        Add-Type -AssemblyName System.Windows.Forms
        Add-Type -AssemblyName System.Drawing
    
        $form = New-Object System.Windows.Forms.Form
        $form.Text = 'Data Entry Form'
        $form.Size = New-Object System.Drawing.Size(300,200)
        $form.StartPosition = 'CenterScreen'
    
        $cancelButton = New-Object System.Windows.Forms.Button
        $cancelButton.Location = New-Object System.Drawing.Point(150,120)
        $cancelButton.Size = New-Object System.Drawing.Size(75,23)
        $cancelButton.Text = 'Cancel'
        $cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
        $form.CancelButton = $cancelButton
        $form.Controls.Add($cancelButton)
    
        $result = $form.ShowDialog()
    

    我希望能创建一个按钮来阅读我指定的文本,但我很难弄清楚。我已将其编辑为:

        Add-Type -AssemblyName System.speech
    
        $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
    
        Add-Type -AssemblyName System.Windows.Forms
        Add-Type -AssemblyName System.Drawing
    
        $form = New-Object System.Windows.Forms.Form
        $form.Text = 'Data Entry Form'
        $form.Size = New-Object System.Drawing.Size(300,200)
        $form.StartPosition = 'CenterScreen'
    
        $speakButton = New-Object System.Windows.Forms.Button
        $speakButton.Location = New-Object System.Drawing.Point(150,120)
        $speakButton.Size = New-Object System.Drawing.Size(75,23)
        $speakButton.Text = 'Speak'
        $speakButton.DialogResult = [System.Windows.Forms.DialogResult]$speak.Speak('My test speech')
        $form.text = $speakButton
        $form.Controls.Add($speakButton)
    
        $result = $form.ShowDialog()
    

    当我启动这个功能时,它会在弹出框之前显示“我的测试演讲”,当我点击按钮时,什么也没发生。很明显,我走错了路,但我不确定正确的路在哪里。

    1 回复  |  直到 2 年前
        1
  •  2
  •   Mathias R. Jessen    2 年前

    您需要为按钮的 Click 事件,在PowerShell中可以这样执行:

    $speakButton.add_Click({
        $speak.Speak('My test speech')
    })
    

    然后删除对的分配 $speakButton.DialogResult

    若要使用文本框作为输入,请将文字字符串值替换为对 Text 要从中读取的文本框控件上的字段:

    $speakButton.add_Click({
        $speak.Speak($variableContainingTextBoxControl.Text)
    })