单击按钮时Powershell点源GUI脚本和返回值

时间:2019-03-13 03:32:33

标签: powershell user-interface

我正在散点采购构建GUI表单的脚本。

用户在文本框中输入一个值,发生一些输入验证,然后如果通过验证,用户可以单击一个按钮:“应用”按钮。 (例如,保存值)

所以我希望该值返回到我的script1,如下所示:

有什么推荐的巧妙方法吗?

#Script1.ps1
. ($PSScriptRoot + "\GUIForm.ps1"
InitialiseForm

#When the Ok button is pressed in the GuiForm.ps1 script. 
#Store value to here to parse elsewhere
#GUIForm.ps1
$TheTextIWantFromTextBox = New-Object system.Windows.Forms.TextBox
$OkButton.Add_Click({SubmitTextBox})

Function SubmitTextBox()
{
    $Form.close()
    return $TheTextIWantFromTextBox.Text
}

Function InitialiseForm()
{
    [void]$Form.ShowDialog()
}

注意:我已经省略了创建表格等的所有代码...如果相关,我将进行更新!

1 个答案:

答案 0 :(得分:0)

只需捕获按钮单击事件的文本框中的内容即可。

您不必显示整个表单,而只是显示其中一部分即可。 您可以为相同的用例创建一个简单的对话框。

您要的是一项非常常见的任务。 YouTube上确实有大量示例和视频显示了如何执行此操作。以及在网站上。

您要的是一项非常常见的任务。参见此处的示例:

Powershell Custom GUI input box for passing values to Variables

我缩短了此回复的代码。

function button ($mailbx) 
{
    ###################Load Assembly for creating form & button######
    [void][System.Reflection.Assembly]::LoadWithPartialName( “System.Windows.Forms”)
    [void][System.Reflection.Assembly]::LoadWithPartialName( “Microsoft.VisualBasic”)

    #####Define the form size & placement
    $form = New-Object “System.Windows.Forms.Form”;
    $form.Width = 500;
    $form.Height = 150;
    $form.Text = $title;
    $form.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen;

    ##############Define text label1
    $textLabel1 = New-Object “System.Windows.Forms.Label”;
    $textLabel1.Left = 25;
    $textLabel1.Top = 15;

    $textLabel1.Text = $mailbx;

    ############Define text box1 for input
    $textBox1 = New-Object “System.Windows.Forms.TextBox”;
    $textBox1.Left = 150;
    $textBox1.Top = 10;
    $textBox1.width = 200;


    #############Define default values for the input boxes
    $defaultValue = “”
    $textBox1.Text = $defaultValue;

    #############define OK button
    $button = New-Object “System.Windows.Forms.Button”;
    $button.Left = 360;
    $button.Top = 85;
    $button.Width = 100;
    $button.Text = “Ok”;

    ############# This is when you have to close the form after getting values
    $eventHandler = [System.EventHandler] {
        $textBox1.Text;
        $textBox2.Text;
        $textBox3.Text;
        $form.Close();
    };


    $button.Add_Click($eventHandler) ;

    #############Add controls to all the above objects defined
    $form.Controls.Add($button);
    $form.Controls.Add($textLabel1);
    $form.Controls.Add($textBox1);

    $ret = $form.ShowDialog();

    #################return values

    return $textBox1.Text
}

$return = button 'Enter Folders' 'Enter mailbox'

# Below variables will get the values that had been entered by the user

$return

这只是一种方法,还有其他捕获和返回文本的方法,例如,不显示任何表单代码,仅显示来自另一个简单对话框WinForm的返回值……

$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK) 

{ 
    ($FName = $FName.Text )
    ($LName = $Lname.Text)
}

WPF(Windows Presentation Foundation)样式表单也可以完成相同的操作。