markus2016
Goto Top

Powershell Click Event Taskleistensymbol

Hallo zusammen,

ich habe eine Frage.
In meinem Script habe ich eine Form über die alle Aufgaben laufen.
$Window = New-Object System.Windows.Forms.Form
$Window.Size = New-Object System.Drawing.Size([Math]::Round($BoundsWidth * (1000 / $BoundsWidth)),[Math]::Round($BoundsHeight * (600 / $BoundsHeight))) 
$Window.StartPosition = $Hashtable.Forms.StartPosition
$Window.Font = $Hashtable.Forms.Front
$Window.Text = "Windows-Image Tool"  
$Window.BackColor = $Hashtable.Forms.BackColor
$Window.ForeColor = $Hashtable.Forms.ForeColor
$Window.Opacity = $Hashtable.Forms.Opacity                                                   
$Window.Topmost = $false
$Window.ShowInTaskbar = $true
$Window.MaximizeBox = $false
$Window.MinimizeBox = $true
$Window.ControlBox = $true
$Window.Visible = $false
$Window.AutoSizeMode = $Hashtable.Forms.AutoSizeMode 
$Window.FormBorderStyle = $Hashtable.Forms.FormBorderStyle 
$Window.ShowIcon = $true
Zusätzlich habe ich eine weitere eigene Form als Log-Fenster.
$Script:WindowLog = New-Object System.Windows.Forms.Form
$Script:WindowLog.Size = New-Object System.Drawing.Size([Math]::Round($BoundsWidth * (985 / $BoundsWidth)),[Math]::Round($BoundsHeight * (200 / $BoundsHeight)))
$Script:WindowLog.StartPosition = $Hashtable.Forms.Log.StartPosition
$Script:WindowLog.Font = $Hashtable.Forms.Log.Font 
$Script:WindowLog.BackColor = $Hashtable.Forms.Log.BackColor
$Script:WindowLog.ForeColor = $Hashtable.Forms.Log.ForeColor
$Script:WindowLog.Opacity = $Hashtable.Forms.Log.Opacity                                                 
$Script:WindowLog.ShowInTaskbar = $false
$Script:WindowLog.MaximizeBox = $false
$Script:WindowLog.MinimizeBox = $false
$Script:WindowLog.ControlBox = $false
$Script:WindowLog.AutoSizeMode = $Hashtable.Forms.Log.AutoSizeMode 
$Script:WindowLog.FormBorderStyle = $Hashtable.Forms.Log.FormBorderStyle  
$Script:WindowLog.DataBindings.DefaultDataSourceUpdateMode = 0

$Script:LogInput = New-Object System.Windows.Forms.TextBox 
$Script:LogInput.Location = New-Object System.Drawing.Size([Math]::Round($BoundsWidth * (10 / $BoundsWidth)),[Math]::Round($BoundsHeight * (10 / $BoundsHeight)))
$Script:LogInput.Size = New-Object System.Drawing.Size([Math]::Round($BoundsWidth * (960 / $BoundsWidth)),[Math]::Round($BoundsHeight * (180 / $BoundsHeight)))
$Script:LogInput.BackColor = $Hashtable.Forms.Log.BackColor
$Script:LogInput.ForeColor = $Hashtable.Forms.Log.ForeColor
$Script:LogInput.BorderStyle = $Hashtable.Forms.Log.BorderStyle
$Script:LogInput.Multiline = $true
$Script:LogInput.ReadOnly = $true
$Script:LogInput.ScrollBars = $Hashtable.Forms.Log.ScrollBars 
$WindowLog.Controls.Add($Script:LogInput)

Über ein Menu kann ich das Log-Fenster anzeigen, oder ausblenden.
[void]$MenuLog.DropDownItems.Add(( Add-ToolStripMenuItem -ToolStripMenuItem "MenuLog_File_Show" -Image $Log -Text "&Show" -Alignment "Right" -Scope "Script" ))  
  
  $MenuLog_File_Show.Add_Click({
  $Script:WindowLog.Visible = $false
  $Window.Top = 20
  $Window.Left = ($BoundsWidth / 2) - ($Window.Width / 2)
  $Script:WindowLog.Show() | Out-Null
  $Script:WindowLog.Top = $Window.Height + 15
  $Script:WindowLog.Visible = $true
  
  $Window.DataBindings.DefaultDataSourceUpdateMode = 0
  })
  
  [void]$MenuLog.DropDownItems.Add(( Add-ToolStripMenuItem -ToolStripMenuItem "MenuLog_File_Hide" -Image $Log -Text "&Hide" -Alignment "Right" -Scope "Script" ))  
  
  $MenuLog_File_Hide.Add_Click({
  $Script:WindowLog.Visible = $false
  $Window.Top = ($BoundsHeight / 2) - ($Window.Height / 2)
  $Window.Left = ($BoundsWidth / 2) - ($Window.Width / 2)

  $Window.DataBindings.DefaultDataSourceUpdateMode = 0
  })
 
  [void]$MenuLog.DropDownItems.Add(( Add-ToolStripMenuItem -ToolStripMenuItem "MenuLog_File_Remove" -Image $Delete -Text "&LogFile" -Alignment "Right" -Scope "Script" ))  
Das funktioniert auch alles super.

Nun aber zu meiner Frage / meinem Problem.
Wenn die $Window Form beim Arbeiten z.B. hinter anderen Fenstern, Anwendungen, usw. verdeckt wird und ich diese über das Taskleistensymbol wieder auf die oberste Ebene auf den Desktop setze, bleibt die Log Form immernoch verdeckt.
In diesem Fall hätte ich gerne die beiden Forms verküpft, oder ähnliches , das auch die Log Form mit auf die oberste Ebene des Desktop zurück gesetzt wird.

Hierzu habe ich es z.B. mit .Activate(), und soweiter versucht. Ohne Erfolg.
Gibt es ein Event, an das ich über das Anklicken des Taskleistensymbols die Log Form steuern kann?
Dazu habe ich leider nicht wirklich was gefunden. Bin mir aber auch nicht ganz sicher nach welchem Begriff ich suchen muss.

Ich hoffe , dass es einigermaßen verständlich beschrieben ist. face-smile

Vielen Dank für Eure Unterstützung

Schöne Grüße
Markus

Content-ID: 562380

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

Ausgedruckt am: 24.11.2024 um 11:11 Uhr

TK1987
Lösung TK1987 01.04.2020 aktualisiert um 23:13:06 Uhr
Goto Top
Moin Markus,

Zitat von @Markus2016:
Nun aber zu meiner Frage / meinem Problem.
Wenn die $Window Form beim Arbeiten z.B. hinter anderen Fenstern, Anwendungen, usw. verdeckt wird und ich diese über das Taskleistensymbol wieder auf die oberste Ebene auf den Desktop setze, bleibt die Log Form immernoch verdeckt.
In diesem Fall hätte ich gerne die beiden Forms verküpft, oder ähnliches , das auch die Log Form mit auf die oberste Ebene des Desktop zurück gesetzt wird.

Hierzu habe ich es z.B. mit .Activate(), und soweiter versucht. Ohne Erfolg.
Activate() ist schon richtig, hast du denn bei deiner Window-Form auch entsprechend das Activated-Event genutzt?
$Window.Add_Activated({$Script:WindowLog.Activate()})
funktioniert bei mir wunderbar.

Gruß Thomas
Markus2016
Markus2016 01.04.2020 um 23:35:00 Uhr
Goto Top
Hallo Thomas,

danke für Deine Hilfe.

Jetzt weiß ich auch, warum es bei mir mit dem Activate nicht funktioniert hat.

Mein Versuch....
$Window.Add_Shown({$Script:WindowLog.Activate()})

Manchmal macht man, einfach komische Sachen und wundert sich dann, dass es nicht funktioniert. face-wink

Mit Add_Activated funktioniert natürlich es perfekt.
$Window.Add_Activated({$Script:WindowLog.Activate()})

Vielen lieben Dank.

Gruß
Markus