.net Powershell SaveFileDialog-弹出两次

.net Powershell SaveFileDialog-弹出两次,.net,winforms,powershell,savefiledialog,.net,Winforms,Powershell,Savefiledialog,请告诉我为什么在这段代码中SaveFileDialog()会两次提示输入文件名 Function output-scrub{ [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null $global:SaveFileDialogNB = New-Object System.Windows.Forms.SaveFileDialog $global:SaveFileDialo

请告诉我为什么在这段代码中SaveFileDialog()会两次提示输入文件名

Function output-scrub{
  [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

  $global:SaveFileDialogNB = New-Object System.Windows.Forms.SaveFileDialog
  $global:SaveFileDialogNB.initialDirectory = "\\server\folder"
  $global:SaveFileDialogNB.filter = "All files (*.*)| *.*"
  $global:SaveFileDialogNB.SupportMultiDottedExtensions = $true
  #$global:SaveFileDialogNB.ShowDialog() | Out-Null
  #just to display the filename value
  $global:SaveFileDialogNB.filename
  #get just filename and the extension into a variable
  #$F1Filename = Split-Path $global:OpenFileDialog.filename -Leaf  ---commented out, only here if we only want to show filename extension alone.
    $global:SaveFileDialogNB.ShowDialog() | Out-Null
    if($SaveFileDialogNB.ShowDialog() -eq 'OK'){
        convertToHashTWO
    }
  return
}


function outPutScrubbedBalances{
    output-scrub
    write-host "file has been saved"
    return
}

它快把我逼疯了。

你已经调用了
$ShowDialog()
两次了。在
if
语句之前一次,在if语句的条件部分中第二次与“OK”进行比较

调用一次,捕获对话框结果,然后检查结果:

$result = $yourDialog.ShowDialog()  
if($result  -eq "OK")               
{              
    # Do something
}
if($yourDialog.ShowDialog() -eq "OK")
{
    # do something
}
或者,只需在
if
语句的条件部分调用它,然后检查结果:

$result = $yourDialog.ShowDialog()  
if($result  -eq "OK")               
{              
    # Do something
}
if($yourDialog.ShowDialog() -eq "OK")
{
    # do something
}

旁注:处理一次性组件很重要,不要忽略它。显示对话框并确保在使用后将其释放的更好方法是:

$dialog = New-Object System.Windows.Forms.SaveFileDialog
try
{
    #Set up dialog, for example
    $dialog.filter = "All files (*.*)| *.*"
    if($dialog.ShowDialog() -eq "OK")
    {
        # do something here, for example
        Write-Host "Save Clicked."
    }
}
finally
{
    if($dialog) { $dialog.Dispose() }
}

您已经调用了两次
$ShowDialog()
。在
if
语句之前一次,在if语句的条件部分中第二次与“OK”进行比较

调用一次,捕获对话框结果,然后检查结果:

$result = $yourDialog.ShowDialog()  
if($result  -eq "OK")               
{              
    # Do something
}
if($yourDialog.ShowDialog() -eq "OK")
{
    # do something
}
或者,只需在
if
语句的条件部分调用它,然后检查结果:

$result = $yourDialog.ShowDialog()  
if($result  -eq "OK")               
{              
    # Do something
}
if($yourDialog.ShowDialog() -eq "OK")
{
    # do something
}

旁注:处理一次性组件很重要,不要忽略它。显示对话框并确保在使用后将其释放的更好方法是:

$dialog = New-Object System.Windows.Forms.SaveFileDialog
try
{
    #Set up dialog, for example
    $dialog.filter = "All files (*.*)| *.*"
    if($dialog.ShowDialog() -eq "OK")
    {
        # do something here, for example
        Write-Host "Save Clicked."
    }
}
finally
{
    if($dialog) { $dialog.Dispose() }
}

您已经调用了两次
$SaveFileDialogNB.ShowDialog()
。我用
$global:SaveFileDialogNB.ShowDialog()| Out Null
调用它第二次是在哪里?我对它进行了注释,现在它只提示了一次,我只想知道现在是哪一个片段在生成提示。您调用了
$SaveFileDialogNB.ShowDialog()
两次。我用
$global:SaveFileDialogNB.ShowDialog()| Out Null
调用第二次的位置调用它?我注释掉了它,现在它只提示了一次,我只想知道现在是哪一段产生了提示。请在调用的两行中都发布。我知道第一个
$global:SaveFileDialogNB.ShowDialog()| Out Null
一旦你指出第二个,我将接受这个答案。谢谢此处:
if($SaveFileDialogNB.ShowDialog()-eq'OK')
您再次调用
ShowDialog()
ShowDIalog()
是函数和提及行,执行它,然后将结果与“OK”进行比较。请将这两行都张贴在调用的位置。我知道第一个
$global:SaveFileDialogNB.ShowDialog()| Out Null
一旦你指出第二个,我将接受这个答案。谢谢此处:
if($SaveFileDialogNB.ShowDialog()-eq'OK')
您再次调用
ShowDialog()
<代码>ShowDIalog()是函数和提及行,执行它,然后将结果与“OK”进行比较。