Сценарий исходного кода Powershell dot и возвращаемое значение при нажатии кнопки - PullRequest
0 голосов
/ 13 марта 2019

Я использую точечный скрипт, который создает форму графического интерфейса.

Пользователь помещает значение в текстовое поле, происходит некоторая проверка ввода, а затем, если он проходит, пользователь может нажать кнопку: кнопку «Применить». (например, чтобы сохранить значение)

Итак, я хочу, чтобы это значение вернулось в мой скрипт1, как показано ниже:

Какие-нибудь рекомендации для аккуратного способа сделать это?

#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 голосов
/ 13 марта 2019

Просто запишите, что находится в текстовом поле события нажатия кнопки.

Вам не нужно показывать всю форму, только ее часть, которая имеет отношение к делу. Вы могли бы просто создать простой диалог для того же варианта использования.

То, что вы просите, является очень распространенной задачей. На YouTube буквально тонны примеров и видео, которые показывают, как это сделать. Как и на самом сайте.

То, что вы просите, является очень распространенной задачей. Смотрите пример здесь:

Поле ввода пользовательского графического интерфейса Powershell для передачи значений в переменные

Я сократил код для этого ответа.

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...