Глобальные переменные из WinForm - PullRequest
0 голосов
/ 14 мая 2018

В настоящее время я пытаюсь использовать значения переменной выбора даты / времени из одной функции и использовать ее несколько раз в другой функции. Выбор даты / времени находится в форме, поэтому, когда пользователь устанавливает дату начала и дату окончания, эти значения присваиваются переменной для использования в другой функции, которая должна вызывать обе эти переменные как минимум дважды. При попытке вызвать эту переменную из первой функции она содержит нулевое значение, даже если она была назначена переменной. Я пытаюсь сохранить значение, созданное в одной функции, для использования в другой функции несколько раз. Спасибо.

 Set-strictMode -off
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
    [System.Windows.Forms.Application]::EnableVisualStyles()
    Add-Type -AssemblyName System.Web
    [Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

   $global:startDate=$null
$global:endDate=$null

function MakeForm{

#region begin GUI
$Form                            = New-Object system.Windows.Forms.Form
$Form.ClientSize                 = '396,180'
$Form.text                       = "Rexpii Integrations Version (Beta)"
$Form.BackColor                  = "#ffffff"
$Form.TopMost                    = $False
$Form.Icon= [System.Drawing.Icon]::ExtractAssociatedIcon('C:\files\scripts\tpgicon.ico')

$btnSubmit                         = New-Object system.Windows.Forms.Button
$btnSubmit.text                    = "Submit"
$btnSubmit.width                   = 60
$btnSubmit.height                  = 30
$btnSubmit.location                = New-Object System.Drawing.Point(220,116)
$btnSubmit.Font                    = 'Microsoft Sans Serif,10'
$btnSubmit.Add_Click({
    $global:startDate= $Global:txtStartDate.Value.ToString("yyyy-MM-dd")
                  $global:endDate= $Global:txtEndDate.Value.ToString("yyyy-MM-dd")

             GetData
             $Form.Close()})

$btnCancel                         = New-Object system.Windows.Forms.Button
$btnCancel.text                    = "Cancel"
$btnCancel.width                   = 60
$btnCancel.height                  = 30
$btnCancel.location                = New-Object System.Drawing.Point(288,116)
$btnCancel.Font                    = 'Microsoft Sans Serif,10'
$btnCancel.Add_Click({
            $Form.Close()
                })
$Global:txtStartDate                       = New-Object system.Windows.Forms.DateTimePicker
$Global:txtStartDate.width                 = 150
$Global:txtStartDate.location              = New-Object System.Drawing.Point(208,40)
$Global:txtStartDate.Format = "Custom"
$Global:txtstartDate.CustomFormat = "yyyy-MM-dd"


$Global:txtEndDate                         = New-Object system.Windows.Forms.DateTimePicker
$Global:txtEndDate.width                   = 150
$Global:txtEndDate.location                = New-Object System.Drawing.Point(208,80)
$Global:txtEndDate.Format="Custom"
$Global:txtEndDate.CustomFormat = "yyyy-MM-dd"
$Form.controls.AddRange(@($btnSubmit,$btnCancel,$PictureBox1,$PictureBox2,$StartDate,$EndDate,$lblStartDate,$lblEndDate,$txtStartDate, $txtEndDate))

[void]$Form.ShowDialog()

}

MakeForm

function GetData{ 
#my scripts number one
Write-Output "This is the first $global:startDate to $global:endDate example"

#my scripts number two
Write-Output "This is the second $global:startDate to $global:endDate example"

}

1 Ответ

0 голосов
/ 15 мая 2018

Во-первых, вам нужно определить свои функции, прежде чем вы сможете их использовать. Вы пытаетесь позвонить GetData до его определения. Переместите вызов на MakeForm (который также показывает форму), чтобы после определения функции для GetData.

Во-вторых, следует изменить GetData на вызов Write-Host вместо Write-Output, чтобы вы могли видеть выходные данные из обработчика событий. И если после показа формы вы позвоните GetData, вы увидите, что глобальные значения установлены правильно.

Итак, последняя часть вашего скрипта должна выглядеть так:

function GetData{ 
    #my scripts number one
    Write-Host "This is the first $global:startDate to $global:endDate example"

    #my scripts number two
    Write-Host "This is the second $global:startDate to $global:endDate example"
}

MakeForm

# Call GetData again to verify that the globals are set.
GetData
...