2017-03-10 2 views
0

Ich arbeite an einem PowerShell-Skript, das angedockte Formulare und Bedienfelder verwendet. Ich war in der Lage, die Form und Platten einfach gut zu schaffen, aber ich habe Probleme eine Auswahlbox immer während der Laufzeit, um die Größe $inputbox.Bottom = $form.Height - 215 mit der Größe zu kontrollieren, aber ich empfange die Fehler.Bottom ist schreibgeschützt

‚Bottom‘ ist ein Read- einzige Eigenschaft.

Die einfache Verwendung von Fill im Panel wird nicht funktionieren, da ich Schaltflächen oberhalb und unterhalb der Listbox habe. Hier ist ein Beispiel von meinem Code:

[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) 
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”) 

$form.ResizeEnd 
$form = New-Object System.Windows.Forms.Form 
$form.Size = New-Object System.Drawing.Size(1040,459) 
$form.KeyPreview = $true 
$form.StartPosition = ‘centerscreen’ 
$form.BackColor = 'MidnightBlue' 
$form.Add_KeyDown({if($_.KeyCode -eq "Escape"){$form.Close()}}) 
$form.Text = "Dialog Box 2.0" 
$form.Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell_ise.exe") 

$buttonPanel3 = New-Object Windows.Forms.Panel 
$buttonPanel3.Size = New-Object Drawing.Size @(290,70) 
$buttonPanel3.Dock = "left" 
$buttonPanel3.BackColor = 'Blue' 

$inputbox = New-Object System.Windows.Forms.ListBox 
$inputbox.BorderStyle = 'NONE' 
$inputbox.Font = New-Object System.Drawing.Font(“segoe UI”,9) 
$inputbox.SelectionMode = "MultiExtended" 
$inputbox.Left = 10 
$inputbox.Top = 105 
$inputbox.Width = 200 
$inputbox.Bottom = $form.Height -215 
$inputbox.Height = $form.Height -215 

$buttonPanel3.Controls.Add($inputbox) 
$form.Controls.Add($buttonPanel3) 
$form.ShowDialog() 

Wenn jemand einig Beispiel-Code eines listbox geben könnte, die (vor allem mit vertikaler Ausdehnung) ändert die Größe, wenn Sie das Formulars der Größe, die ausgezeichnet wäre.

+1

Bearbeiten Sie die 'Height' Eigenschaft, nicht die' Bottom' Eigenschaft –

+0

Wenn ich die Höhe Eigenschaft bearbeiten wird es richtig initialisiert werden, aber Es wird nicht geändert, während das Programm ausgeführt wird. – CuriousOne

+0

Versuchen Sie es manuell (z. B. durch Ziehen der Grenzen des Steuerelements)? Ich sehe keine Versuche, programmgesteuert die Größe eines Steuerelements zu ändern * während * das Formular angezeigt wird –

Antwort

1

Am Ende habe ich meine Form komplett umgestaltet und benutze die Fill-Methode, aber ich wollte etwas über die Form-Größenanpassung sagen, denn das war das wahre Problem hier.

Der Größenänderungshandler für das Formular wäre $form.Add_Resize({}). Innerhalb der Klammern konnte ich die Eigenschaften der Höhe und der Breite wie gewünscht ändern. In diesem Fall wollte ich nur die Höhe Eigenschaft, so würde der Code wie:

[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) 
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”) 

$form.ResizeEnd 
$form = New-Object System.Windows.Forms.Form 
$form.Size = New-Object System.Drawing.Size(1040,459) 
$form.KeyPreview = $true 
$form.StartPosition = ‘centerscreen’ 
$form.BackColor = 'MidnightBlue' 
$form.Add_KeyDown({if($_.KeyCode -eq "Escape"){$form.Close()}}) 
$form.Text = "Dialog Box 2.0" 
$form.Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell_ise.exe") 
$form.Add_Resize({ 
    $inputbox.Height = $form.Height -215 
}) 

$buttonPanel3 = New-Object Windows.Forms.Panel 
$buttonPanel3.Size = New-Object Drawing.Size @(290,70) 
$buttonPanel3.Dock = "left" 
$buttonPanel3.BackColor = 'Blue' 

$inputbox = New-Object System.Windows.Forms.ListBox 
$inputbox.BorderStyle = 'NONE' 
$inputbox.Font = New-Object System.Drawing.Font(“segoe UI”,9) 
$inputbox.SelectionMode = "MultiExtended" 
$inputbox.Left = 10 
$inputbox.Top = 105 
$inputbox.Width = 200 
$inputbox.Height = $form.Height -215 

$buttonPanel3.Controls.Add($inputbox) 
$form.Controls.Add($buttonPanel3) 
$form.ShowDialog()