none
Wie Steuerelement auf einer GUI über den Namen ansprechen? RRS feed

  • Frage

  • Habe auf einem Fenster über eine ForEach Schleife Labels erzeugt. Diese sollen den Status von Netzwerkadapter anzeigen an die ein Netzkabel eingesteckt ist. Dazu sollen nur von einzelnen Labels die Farbe geändert werden.
    Die ForEach Schleife liest dazu von den vorhandenen Adaptern den Index aus und hängt diesen an den jeweiligen Labelnamen.

    Hier die Schleife:

    $Pos = 47
    
    ForEach ($Tmp1 In $NtAdaptPhysical)
    {
      $Tmp2 = ($Tmp1.ifIndex).ToString()
      $LbConnect = New-Object System.Windows.Forms.Label
      $LbConnectSize = New-Object.System.Drawing.Size
      $LbConnectLoc = New-Object.System.Drawing.Point
      $LbConnectSize.Height = 7
      $LbConnectSize.Width = 20
      $LbConnectLoc.X = 474
      $LbConnectLoc.Y = $Pos
      $LbConnect.ClientSize = $LbConnectSize
      $LbConnect.Location = $LbConnectLoc
      $LbConnect.Name = "LbConnect$Tmp2"
      $Gruppe4.Controls.Add($LbConnect)
    
      $Pos += 12.5
    }


    Die Indexe lauten wie folgt: (5; 17; 9; 3; 6; 10; 13)
    Die Namen lauten dann: LbConnect5; LbConnect17; LbConnect9; LbConnect3; LbConnect6; LbConnect10; LbConnect13

    Jetzt soll z.B. von LbConnect9 die Hintergrundfarbe geändert werden.

    Wie mache ich das?

      


    Gelegentlicher Programmierer für Freizeitprojekte


    Montag, 19. Oktober 2020 15:45

Antworten

  • Lege dir eine globale Hashtable an und speichere dort die Elementpaare ab:

    $Controls = @{}

    :

    $LbConnect = New-Object System.Windows.Forms.Label
    $Controls["LbConnect"] = $LbConnect
    :
    :

    Allerdings vermisse ich noch das Hinzufügen der Controls zur Controls-Auflistung deiner Form.
    Montag, 19. Oktober 2020 16:19
  • Alternativ kannst du auch die find()-Methode benutzen:

    $TargetControl = $Gruppe4.Controls.Find("LBConnect9",$True)
    
    $TargetControl.backcolor = ...

     


    Blog: http://www.bytecookie.de

    Powershell Code Manager: 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.

    Dienstag, 20. Oktober 2020 22:44
    Moderator

Alle Antworten

  • Lege dir eine globale Hashtable an und speichere dort die Elementpaare ab:

    $Controls = @{}

    :

    $LbConnect = New-Object System.Windows.Forms.Label
    $Controls["LbConnect"] = $LbConnect
    :
    :

    Allerdings vermisse ich noch das Hinzufügen der Controls zur Controls-Auflistung deiner Form.
    Montag, 19. Oktober 2020 16:19
  • ...und bitte, poste Code als Code (2. Button von rechts)!

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Montag, 19. Oktober 2020 16:31
  • Alternativ kannst du auch die find()-Methode benutzen:

    $TargetControl = $Gruppe4.Controls.Find("LBConnect9",$True)
    
    $TargetControl.backcolor = ...

     


    Blog: http://www.bytecookie.de

    Powershell Code Manager: 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.

    Dienstag, 20. Oktober 2020 22:44
    Moderator
  • Die Find-Methode kann ich persönlich aus Performancegründen nicht empfehlen, da sie sequentiell sucht.
    Mittwoch, 21. Oktober 2020 08:19
  • Kann ich nicht bestätigen.

    Ich habs mal kurz getestet mit 50 und 5000 controls. Die Suche braucht etwa immer die gleiche Zeit, egal welches Control gesucht wird. ~ 5-6 ms. In jedem Fall ist es unerheblich.


    Blog: http://www.bytecookie.de

    Powershell Code Manager: 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.

    Mittwoch, 21. Oktober 2020 10:39
    Moderator
  • Gut zu wissen;-).
    Mittwoch, 21. Oktober 2020 11:07