我正在散点采购构建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()
}
注意:我已经省略了创建表格等的所有代码...如果相关,我将进行更新!
答案 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)样式表单也可以完成相同的操作。