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-ID: 305305

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

colinardo
Lösung colinardo 25.05.2016 aktualisiert um 13:32:46 Uhr
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
SaschaRD
SaschaRD 25.05.2016 um 14:52:40 Uhr
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
129413
Lösung 129413 25.05.2016 aktualisiert um 17:14:36 Uhr
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
colinardo
colinardo 25.05.2016 aktualisiert um 17:42:56 Uhr
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
SaschaRD
SaschaRD 25.05.2016 aktualisiert um 22:16:50 Uhr
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