PowerShell Windows Forms GUI, поля мерцают и меняют положение вместо состояния c (текст был выведен) - PullRequest
0 голосов
/ 26 мая 2020

Я пытался создать текстовое поле ввода в PowerShell, используя некоторые классы. NET. Поскольку я не очень хорошо знаком с этими классами, я немного боролся. Я могу создавать все поля и поля, даже захватывать тексты. Проблема в том, что поля в GUI меняют свое положение по вертикали и горизонтали (я обнаружил, что когда я вводил какой-то текст и нажимал кнопку «добавить», чтобы добавить больше полей в форму windows). Я много раз пытался изменить его, но он все равно меняет свое положение. У меня проблема в функции "Add-Row"

function form($title, $incidentnumber, $justification){
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
#######creating from######
$global:form = New-Object Windows.Forms.Form
$global:form.Size = New-Object Drawing.Size @(900, 600)
$global:form.SuspendLayout() #anchor for ensure that everything is loaded in the end
$global:form.StartPosition = "CenterScreen" 
$global:form.Text=$title
#######labels#######
####Text Label 1
$textLabel1=New-Object "System.Windows.Forms.Label";
$textLabel1.Top=10
$textLabel1.Text=$incidentnumber
$textLabel1.Font = [System.Drawing.Font]::new("Microsoft Sans Serif", 10, [System.Drawing.FontStyle]::Bold)
$textLabel1.Left=25-($incidentnumber.Length)/2
####Text Label 2
$textLabel2=New-Object "System.Windows.Forms.Label";
$textLabel2.Top=10
$textLabel2.Text=$justification
$textLabel2.Font = [System.Drawing.Font]::new("Microsoft Sans Serif", 10, [System.Drawing.FontStyle]::Bold)
$textLabel2.Left=375-($justification.Length)/2
########new panel########
$dp = New-Object Windows.Forms.TableLayoutPanel
########buttons#########
####Define OK button
$button = New-Object System.Windows.Forms.Button
$button.Width = 100
$button.Text = “Ok”
$button.Location = New-Object System.Drawing.Point(775,525)
####Define cancel button
$button1 = New-Object System.Windows.Forms.Button
$button1.Width = 100
$button1.Text = “Cancel”
$button1.Location = New-Object System.Drawing.Point(665,525)
####Define add incident button
$button2 = New-Object Windows.Forms.Button
$button2.Text = "Add Incident"
$button2.Add_Click({Add-Row})
$button2.Width = 100
$button2.Location = New-Object System.Drawing.Point(175,525)
####Define instructions button
$button3 = New-Object System.Windows.Forms.Button
$button3.Width = 100
$button3.Text = “Instructions”
$button3.Location = New-Object System.Drawing.Point(25,525)

$global:k = 0
$global:vetor = New-Object 'object[,]' 1,1 

Function Add-Row {
    $script:dp.GrowStyle
    $zeroBasedRow = $script:dp.RowCount
        $rowcount = $dp.GrowStyle
    for ($i=0; $i -lt 2; $i++) {
        $textbox=New-Object System.Windows.Forms.TextBox
        $textbox.Width = 300
        $textbox.Margin = 25
        $defaultValue=""
        $textbox.Text=$defaultValue
        $textbox | Set-Variable -Name "textbox$global:k" -Value $textbox.Text -ErrorAction SilentlyContinue
        $dp.Controls.Add($textbox,$i,$zeroBasedRow)
        }
   }



Function Create-Data-Panel ($width, $height) {

    $dataPanel = New-Object Windows.Forms.TableLayoutPanel
    $dataPanel.Size = New-Object Drawing.Size @($width,$height)
        $dataPanel.Top = 30
    $dataPanel.AutoScroll = $true
    $dataPanel.BackColor = "Transparent"
    $dataPanel.CellBorderStyle = "None"
    $dataPanel.RowCount = 0
    $dataPanel.ColumnCount = 2  


    $dataPanel
}

$hght = $form.size.height * 3/4
$dp = Create-Data-Panel 880 490

##################handlers and more clicks ########
$eventHandler = {
$form.Close() 
}
$button.Add_Click($eventHandler)

####event handler object for cancel button
$eventHandler1 = [System.EventHandler]{
$global:vetor = $null
$form.Close() 
}

$button1.Add_Click($eventHandler1)

$Button_Click = 
{

    [System.Windows.Forms.MessageBox]::Show("Type: 1 = Accepted, 0 = Not Accepted", "Instructions")
}

$button3.Add_Click($Button_Click)


##########add controls##############
$form.Controls.Add($dp)
$form.Controls.Add($textLabel1)
$form.Controls.Add($textLabel2)
$form.Controls.Add($button)
$form.Controls.Add($button1)
$form.Controls.Add($button2)
$form.Controls.Add($button3)
$form.Add_Shown( { $form.Activate() } )    
$form.ResumeLayout()
$form.ShowDialog() | Out-Null


########return values in $return (texts)#######

$global:vetor
}

Какие-нибудь решения могут мне помочь? Модификации ???

...