saschard
Goto Top

Powershell: Form Window Event Minimize und Maximize

Hallo zusammen,

bin dabei eine Form mit einem Notification Icon im Tray zu verknüpfen, funktioniert soweit.
Kann also über das Notification Icon im Tray die Form per Doppelklick wieder in ihren Ursprungszustand zurück befördern.

Was leider nicht funktioniert ist ein Event auf den Standard Minimierungs-Button zu bekommen.
Für den Close-Button gibt es ein Event Add_FormClosing, welches ich bereits verwenden (siehe unten). Gibt es sowas auch für die Minimize-/ Maximize-Buttons?
function formObject {
	[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null  
	[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null  

	[System.Windows.Forms.Application]::EnableVisualStyles()
	$mainWindow = New-Object System.Windows.Forms.Form
	$mainWindow.Size = New-Object System.Drawing.Size(550,445)
	$mainWindow.FormBorderStyle = 'FixedDialog'  
	$mainWindow.Text = 'Test Form'  
	$mainWindow.StartPosition = 'CenterScreen'  
	$mainWindow.MaximizeBox = $false
	#$mainWindow.WindowState = "minimized"  
	$mainWindow.ShowInTaskbar = $false

  $notifyIcon = New-Object System.Windows.Forms.NotifyIcon
	$notifyIcon.Icon = [System.Drawing.SystemIcons]::Information
  $notifyIcon.BalloonTipText = "Test Tip Text"  
  $notifyIcon.BalloonTipTitle = "Test Title Text"  
  $notifyIcon.Visible = $true
  $notifyIcon.Add_MouseDoubleClick({
    if ($_.Button -eq [System.Windows.Forms.MouseButtons]::Left){
      $mainWindow.WindowState = "Normal"  
    }
  })
  $mainWindow.Add_FormClosing({
    $notifyIcon.Dispose()
  })
  
  $mainWindow.ShowDialog() | Out-Null
}
formObject
Möchte auf dem Event dann $mainWindow.WindowState = "minimized" setzen, so dass die Form nicht immer über der Taskbar klebt.

Danke und Gruß, Sascha

Uwe hat doch bestimmt eine Lösung @colinardo face-smile

Content-Key: 305305

Url: https://administrator.de/contentid/305305

Printed on: April 23, 2024 at 20:04 o'clock

Member: colinardo
Solution colinardo May 25, 2016 updated at 11:32:46 (UTC)
Goto Top
Hallo Sascha,
mach es über das Resize-Event dann fragst du den Status des Fensters im Event-Handler ab:
$mainWindow.add_Resize({ 
    if ($mainWindow.WindowState -eq [System.Windows.Forms.FormWindowState]::Minimized){
        [System.Windows.Forms.MessageBox]::Show("Form wurde minimiert!")  
    }
})
Grüße Uwe
Member: SaschaRD
SaschaRD May 25, 2016 at 12:52:40 (UTC)
Goto Top
Hallo Uwe,

funktioniert wie immer einwandfrei! Vielen Dank für die Lösung.
Direkt es neues Problemchen face-wink
Wird $mainWindow.ShowInTaskbar = $false gesetzt und die Form minimiert (was als Schließen des Fensters interpretiert wird), denn $mainWindow.ShowDialog() spuckt Cancel aus.
$mainWindow.Add_Resize({
  if ($mainWindow.WindowState -eq [System.Windows.Forms.FormWindowState]::Minimized){
      $mainWindow.ShowInTaskbar = $false
  }
})
Kann kein Event für System.Windows.Forms finden, welches den Vater $mainWindow in den Hintergrund setzt.

Danke und Gruß, Sascha
Mitglied: 129413
Solution 129413 May 25, 2016 updated at 15:14:36 (UTC)
Goto Top
Kann kein Event für System.Windows.Forms finden, welches den Vater $mainWindow in den Hintergrund setzt.
function formObject {
	[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null  
	[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null  

	[System.Windows.Forms.Application]::EnableVisualStyles()
	$mainWindow = New-Object System.Windows.Forms.Form
	$mainWindow.Size = New-Object System.Drawing.Size(550,445)
	$mainWindow.FormBorderStyle = 'FixedDialog'  
	$mainWindow.Text = 'Test Form'  
	$mainWindow.StartPosition = 'CenterScreen'  
	$mainWindow.MaximizeBox = $false
	$mainWindow.ShowInTaskbar = $false

  $notifyIcon = New-Object System.Windows.Forms.NotifyIcon
	$notifyIcon.Icon = [System.Drawing.SystemIcons]::Information
  $notifyIcon.BalloonTipText = "Test Tip Text"  
  $notifyIcon.BalloonTipTitle = "Test Title Text"  
  $notifyIcon.Visible = $true
  $notifyIcon.Add_MouseDoubleClick({
    if ($_.Button -eq [System.Windows.Forms.MouseButtons]::Left){
      $mainWindow.WindowState = "Normal"  
      $mainWindow.Opacity = 100
    }
  })
  $mainWindow.Add_FormClosing({
    $notifyIcon.Dispose()
  })
  $mainWindow.add_Resize({
    if ($mainWindow.WindowState -eq [System.Windows.Forms.FormWindowState]::Minimized){
        $mainWindow.Opacity = 0 
    }
})
  
  $mainWindow.ShowDialog() | Out-Null
}
formObject
Gruß skybird
Member: colinardo
colinardo May 25, 2016 updated at 15:42:56 (UTC)
Goto Top
Jepp so kann man es im einfachsten Fall machen. Andernfalls muss man hier ein einen Umweg über eine unsichtbare zweite parentForm gehen, aber Für solche erweiterten GUI-Sachen nehme ich dann doch lieber gleich VisualStudio und bau mir dann eine vernünftige Anwendung zusammen.

Grüße Uwe
Member: SaschaRD
SaschaRD May 25, 2016 updated at 20:16:50 (UTC)
Goto Top
Hallo @129413 und Uwe,

danke für eure Antworten.

Klar mit Opacity einfach die Form unsichtbar machen, eine einfache Lösung die für meine Zwecke vollkommen ausreichend ist.

Schöne Feiertage und Gruß, Sascha