Function WinForm中的全局变量

Function WinForm中的全局变量,function,powershell,user-interface,global-variables,Function,Powershell,User Interface,Global Variables,我目前正在尝试从一个函数中使用日期/时间选择器变量的值,并在另一个函数中多次使用它。日期/时间选择器位于表单上,因此当用户设置开始日期和结束日期时,这些值将分配给要在另一个函数中使用的变量,该函数应至少调用这两个变量两次。当试图从第一个函数调用该变量时,它包含一个空值,即使它被分配给了一个变量。我试图将在一个函数中创建的值保留在另一个函数中多次使用。多谢各位 Set-strictMode -off [void][System.Reflection.Assembly]::LoadWith

我目前正在尝试从一个函数中使用日期/时间选择器变量的值,并在另一个函数中多次使用它。日期/时间选择器位于表单上,因此当用户设置开始日期和结束日期时,这些值将分配给要在另一个函数中使用的变量,该函数应至少调用这两个变量两次。当试图从第一个函数调用该变量时,它包含一个空值,即使它被分配给了一个变量。我试图将在一个函数中创建的值保留在另一个函数中多次使用。多谢各位

 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"

}

首先,您需要先定义函数,然后才能使用它们。您试图在定义数据之前调用它。将对
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

我拿出了我所拥有的大部分,只关注有问题的代码。但是,现在我对它进行了编辑,包括了所有内容。我只是假设我不需要提供更明显的东西。对不起,我已经说明了我的问题。我知道这可能很难理解,但请阅读我作为问题提供的内容。我的第一个建议是在任何地方使用
$GLOBAL:startDate
$GLOBAL:endDate
,而不是像在某些地方那样使用
$env:startDate
$env:endDate
。我已经做到了。我无意中发布了我当前正在处理的代码,该代码建议创建$env而不是$global或$script。我用正确(但错误)的代码重新编辑,这是我遇到问题的原始代码。请,请,请创建一个。通常,这样做的行为会告诉你问题所在。