【问题标题】:Powershell SaveFileDialog - Pops twicePowershell SaveFileDialog - 弹出两次
【发布时间】:2019-11-22 10:11:59
【问题描述】:

请告诉我为什么在这段代码中 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
}

这让我发疯了。

【问题讨论】:

  • 你给$SaveFileDialogNB.ShowDialog()打了两次电话。
  • 我用$global:SaveFileDialogNB.ShowDialog() | Out-Null 调用它第二次调用它在哪里?
  • 我把它注释掉了,现在它只提示一次,我只想了解现在是哪一块产生了提示。

标签: .net winforms powershell savefiledialog


【解决方案1】:

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

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

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

或者,只需在if 语句的条件部分调用它并检查结果:

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() }
}

【讨论】:

  • 请将两行都贴在它调用的地方。我知道第一个。 $global:SaveFileDialogNB.ShowDialog() | Out-Null 一旦你指出第二个,我会接受这个作为答案。谢谢!
  • 这里:if($SaveFileDialogNB.ShowDialog() -eq 'OK') 你又打电话给ShowDialog()ShowDIalog() 是函数和提及行,执行它,然后将结果与“OK”进行比较。
猜你喜欢
  • 2018-11-04
  • 2018-06-18
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多