Winmers оболочки сохраняет фоновое состояние по умолчанию - PullRequest
0 голосов
/ 28 мая 2019

Эксперименты с Winforms в Powershell.

Я создаю Winform, на котором я рисую с помощью System.Drawing. После окончания рисования мне нужно сохранить его состояние, чтобы позже к нему вернуться.

В приведенном ниже примере я хочу вернуться в состояние с одной нарисованной линией (= перед рисованием прямоугольника). Где ошибка?

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
[System.Windows.Forms.Application]::EnableVisualStyles()
cd $PSScriptRoot
$Form = new-Object system.Windows.Forms.Form
$size = 150
$Form.ClientSize = "$size,$size"
$graphics = $Form.CreateGraphics()
$pen = New-Object System.Drawing.pen Black, 25
$brush = New-Object System.Drawing.SolidBrush Green 
$form.Add_Paint(    
{  
    $graphics.DrawLine($pen, 0,0,100,100)    
    # Save graphics state.
    $state = $graphics.Save()       
    $graphics.FillRectangle($brush, 0, 0, 100, 100)
    # Restore graphics state.
    $graphics = $graphics.Restore($state)
}
) 
$Form.ShowDialog()

1 Ответ

0 голосов
/ 29 мая 2019

удалось решить. Не идеально, но в основном работает.

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
[System.Windows.Forms.Application]::EnableVisualStyles()
cd $PSScriptRoot
$size = 150
$Form = new-Object system.Windows.Forms.Form
$Form.ClientSize = "$size,$size"
$picbox = New-Object System.Windows.Forms.PictureBox
$picbox.Width = $size
$picbox.Height = $size
$Form.Controls.Add($picbox)
$bitmap = New-Object system.drawing.bitmap $size, $size
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$pen = New-Object System.Drawing.pen Orange, 25
$brush = New-Object System.Drawing.SolidBrush Blue 
$backgroundBrush = New-Object System.Drawing.SolidBrush White 
$form.Add_Shown(  
{  
    $graphics.DrawLine($pen, 0,0,100,100)    
    # Save graphics state.
    $bitmap.Save("C:\tmp.jpeg") #problems with closing access to files       
    $graphics.FillRectangle($brush, 0, 0, 100, 100)    
    $bitmap.Save("C:\tmpChanged.jpeg")#just to see it really changed.
    # Restore graphics state.
    $bitmap = [System.Drawing.Bitmap]::FromFile("C:\tmp.jpeg")
    $picbox.Image = $bitmap 
    $Form.Update()
}
) 
$Form.ShowDialog()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...