Получить возвращаемую переменную из события add_Click (PowerShell)

Лучшее многострочное выражение regex комментариев - это развернутая версия (?s)/\*.*?\*/, которая выглядит как

String pat = "/\\*+[^*]*\\*+(?:[^/*][^*]*\\*+)*/";

См. пояснение в regex101.com .

Короче говоря,

  • /\*+ - сопоставить начало комментария, /* и любые звездочки 0+ после него
  • [^*]*\*+ - сопоставить 0+ символов, кроме *, за которыми следуют 1+ литеральные *
  • (?:[^/*][^*]*\*+)* - 0+ последовательности из: [^/*][^*]*\*+ - не / или * (совпадающие с [^/*]), за которым следуют символы 0 + не звездочки ([^*]*), за которыми следуют звездочки 1+ (\*+)
  • / - закрытие /

regex Дэвида требует 26 шагов , чтобы найти совпадение в моей строке примера, а моему регулярному выражению требуется только 12 шагов . С огромными входами, регулярное выражение Дэвида, скорее всего, потерпит неудачу с проблемой переполнения стека или что-то подобное, потому что совпадение .*? ленивых точек неэффективно из-за ленивого расширения шаблона в каждом месте, которое выполняет механизм регулярных выражений, в то время как мой шаблон соответствует линейным фрагментам текста в один раз.

0
задан Aaron 7 March 2019 в 03:16
поделиться

1 ответ

Используйте хеш-таблицу:

Add-Type -AssemblyName System.Windows.Forms    
Add-Type -AssemblyName System.Drawing

$hash = [hashtable]::Synchronized(@{}) 
$hash.returnedVar = ""

Function Button_Click() {

    [System.Windows.Forms.MessageBox]::Show("Button Clicked")
    $returnedVariable = "The Returned Variable Worked"
    Return $returnedVariable
}

Function Generate-Form {

    # Build Form
    $Form = New-Object System.Windows.Forms.Form
    $Form.Text = "My Form"
    $Form.Size = New-Object System.Drawing.Size(200,200)
    $Form.StartPosition = "CenterScreen"
    $Form.Topmost = $True

    # Add Button
    $Button = New-Object System.Windows.Forms.Button
    $Button.Location = New-Object System.Drawing.Size(35,35)
    $Button.Size = New-Object System.Drawing.Size(120,23)
    $Button.Text = "Show Dialog Box"

    $Form.Controls.Add($Button)

    #Add Button event 

    $OutputVariableFromGenerateForm = $Button.Add_Click({$hash.returnedVar = Button_Click; [void]$form.Close(); [void]$form.Dispose(); })
    # $returnedVar contains an array @("OK,"The Returned Variable Worked"), 
    # but it appears to be out of scope because it is in a script block.
    # I only want "The Returned Variable Worked"


    #Show the Form 
    [void]$form.ShowDialog() 
    $OutputVariableFromGenerateForm # This is OK
    $hash.returnedVar # This is "The Returned Variable Worked"

} #End Function 

Generate-Form
0
ответ дан f6a4 7 March 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: