none
Add_Click Automatisch einfügen

    Frage

  • Ich bastel grade an einer GUI die ähnlich einem Lageplan für Computerplätze aufgebaut ist. Jeder Computer ist dort als Button abgebildet. Genauso wie ich mit eurer Hilfe bereits geschafft habe, dass der Buttontext dynamisch mit den Computernamen befüllt wird, möchte ich nun auch den Eventhandler automatisch für alle 150 Buttons einfügen lassen. Dafür habe ich mir sowas hier überlegt:

    Foreach ($Key in ($hashtable.GetEnumerator()))
    	{
    		$Key = $Key.name
    		(Get-Variable -ErrorAction SilentlyContinue -Name *$key).Value.add_click({ Write-Host "Ich bin Computer $computername  })
    	}

    Kurz zur Erklärzung; Alle Computernamen und dazugehörige Buttonnamen sind in einer Hashtable gespeichert. Daher kann ich mit der Hashtable alle Buttonevents mit der foreachschleife runterarbeiten.


    Ich bin bereits soweit gekommen, dass bei sämtlichen Buttons eine Aktion ausgelöst wird. Nun möchte ich aber, dass mir der jeweilige Name des gedrückten Buttons zurückgegeben wird. Hat hier einer eine Idee?

    Donnerstag, 20. April 2017 14:09

Antworten

  •  

    Das eventauslösende Objekt, in diesem Fall der Button, lässt sich innerhalb des Event-Codes über einen Parameter definieren und dann weiterverwenden.
    Beispiel:

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    
    $Bn1 = New-Object System.Windows.Forms.Button
    $Bn1.Name = "ButtonName"
    $Bn1.add_click({ 
    	Param($sender) 
    	Write-Host $sender.Name 
    })
    
    $Form = New-Object System.Windows.Forms.Form
    $Form.Controls.Add($Bn1)
    $Form.ShowDialog()
     

    $sender enthält im Beispiel oben dann nach dem Click das komplette Button-Objekt. Du könntest also auch z.b. andere Eigenschaften wie die Größe oder Beschriftung von $sender verändern oder weitere Events definieren und würdest in Wirklichkeit den auslösenden Button (hier $Bn1) verändern.
     
    Ich nehme an dein anderer Thread hier im Forum hat sich erledigt? Schließe den dann bitte.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    • Als Antwort markiert Sebamedo Freitag, 21. April 2017 08:17
    Donnerstag, 20. April 2017 18:41
    Moderator

Alle Antworten

  •  

    Das eventauslösende Objekt, in diesem Fall der Button, lässt sich innerhalb des Event-Codes über einen Parameter definieren und dann weiterverwenden.
    Beispiel:

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    
    $Bn1 = New-Object System.Windows.Forms.Button
    $Bn1.Name = "ButtonName"
    $Bn1.add_click({ 
    	Param($sender) 
    	Write-Host $sender.Name 
    })
    
    $Form = New-Object System.Windows.Forms.Form
    $Form.Controls.Add($Bn1)
    $Form.ShowDialog()
     

    $sender enthält im Beispiel oben dann nach dem Click das komplette Button-Objekt. Du könntest also auch z.b. andere Eigenschaften wie die Größe oder Beschriftung von $sender verändern oder weitere Events definieren und würdest in Wirklichkeit den auslösenden Button (hier $Bn1) verändern.
     
    Ich nehme an dein anderer Thread hier im Forum hat sich erledigt? Schließe den dann bitte.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    • Als Antwort markiert Sebamedo Freitag, 21. April 2017 08:17
    Donnerstag, 20. April 2017 18:41
    Moderator
  • Hey danke das war des Rätsels Lösung. Wieder was dazu gelernt, dankesehr!
    Freitag, 21. April 2017 08:17