none
Variablennamen in einer for Schleife ändern RRS feed

  • Frage

  • Hallo Profis

    habe eine Frage wegen einer for Schleife.

    ich habe eine Anzahl Labelfelder die alle mit $Label beginnen und dann mit einer fortlaufenden Zahl.

    Diese werden je nach Funktion unsichtbar oder sichtbar.Ich verzweifle weil ich jetzt nur in der Funktion dies so löse

    function LabelEntfernen
    {
        $label1.Visible = $False
        $label2.Visible = $False
        $label3.Visible = $False
        $label4.Visible = $False
        $label5.Visible = $False
        $label6.Visible = $False
        $label7.Visible = $False
        $label8.Visible = $False
        $label9.Visible = $False
        $label10.Visible = $False
        $label11.Visible = $False
        $label12.Visible = $False
    }

    Aber ich möchte eine For Schleife die automatisch durchläuft ungefähr so

    for ($i=0;$i -le 12; $i++){"$label"+$i.visible = $False

    leider bekomme ich das mit dem Labelnamen und der Zähler Variblen nicht hin.

    Danke im voraus

    Gruß Karl

    Dienstag, 25. März 2014 13:06

Antworten

  • Hi,

    viel einfacher und kontrolierbarer ist es wenn man alle Controls (Label,Textbox etc. ) einer Form oder des Parent-Control aufzählen lässt und von denen dann die Eigenschaften bearbeitet. In deinem Fall z.b.

    #Wobei $Parentcontrol das Form, ein Panel,eine Groupbox, oder ein Tablelayoutpanel sein kann.
    foreach($Label in $($ParentControl.Controls |?{$_ -is [System.Windows.Forms.Label]})){
        $label.Visible = $false
    }

    Donnerstag, 27. März 2014 07:37
  • dann haette ich noch den:

    (Get-variable -name ("Label" + $i)).value.Visible = $False


    Wobei die Fehlermeldung eigentlich daruf hinweist, dass er nur mit der $label11 Probleme hat.
    Dienstag, 25. März 2014 14:23

Alle Antworten

  • Hallo,

    meinst Du sowas:

    PS E:\scripte> $label1 = "ABC"
    PS E:\scripte> $i = 1
    PS E:\scripte> $label1
    ABC
    PS E:\scripte> $i
    1
    PS E:\scripte> set-variable -name ("Label" + $i) -value "XYZ"
    PS E:\scripte> $label1
    XYZ
    PS E:\scripte>


    Beste Gruesse
    brima



    • Bearbeitet brima Dienstag, 25. März 2014 14:12
    Dienstag, 25. März 2014 13:58
  • habe das mal in einer for Schleife ausprobiert, kommt leider Fehler

    function LabelEntfernen
    {
    for ($i=0;$i -le 12; $i++)
    {
        set-variable -name ("Label" + $i).Visible = $False
    }

    Set-Variable : Das Argument kann nicht an den Parameter "Name" gebunden werden, da es NULL ist.
    In Zeile:38 Zeichen:24
    +     set-variable -name ("Label" + $i).Visible = $False
    +                        ~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Set-Variable], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SetVariableCommand

    Dienstag, 25. März 2014 14:04
  • Hallo,

    ja dachte ich mir schon ... weil es nicht direkt um die Varaibel label1 geht, sondern um eine ihrer Eigenschaften.

    Ich  probiere mal ...

    Beste Gruesse
    brima

    Dienstag, 25. März 2014 14:14
  • Hallo,

    ich kann es nicht testen versuche mal dies in der Forschleife

    (Get-variable -name ("Label" + $i)).Visible = $False
    Beste Gruesse
    brima
    Dienstag, 25. März 2014 14:17
  • leider kommt dort auch ein Fehler

    function LabelEntfernen
    {
    for ($i=1;$i -le 12; $i++)
    {
        (Get-variable -name ("$label" + $i)).Visible = $False
    }

    Die Eigenschaft "Visible" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass es die Eigenschaft gibt und dass
    sie festgelegt werden kann.
    In Zeile:38 Zeichen:5
    +     (Get-variable -name ("$label" + $i)).Visible = $False
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : PropertyNotFound

    Dienstag, 25. März 2014 14:19
  • Das war die ganze Fehlermeldung

    Get-variable : Es kann keine Variable mit dem Namen "$label11" gefunden werden.
    In Zeile:38 Zeichen:6
    +     (Get-variable -name ('$label' + $i)).Visible = $False
    +      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: ($label11:String) [Get-Variable], ItemNotFoundException
        + FullyQualifiedErrorId : VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand

    Die Eigenschaft "Visible" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass es die Eigenschaft gibt und dass
    sie festgelegt werden kann.
    In Zeile:38 Zeichen:5
    +     (Get-variable -name ('$label' + $i)).Visible = $False
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : PropertyNotFound

     
    Dienstag, 25. März 2014 14:22
  • dann haette ich noch den:

    (Get-variable -name ("Label" + $i)).value.Visible = $False


    Wobei die Fehlermeldung eigentlich daruf hinweist, dass er nur mit der $label11 Probleme hat.
    Dienstag, 25. März 2014 14:23
  • Supper jetzt funktionierts. Danke

    Hast du noch eine Ahnung wie ich einen Count von den Labelfeldern rausbekomme so das ich diese Variable in die For Schleife einbinden könnte.

    Aber ansonsten vielen Dank.

    Dienstag, 25. März 2014 14:28
  • (Get-Variable lab*).Count

    Das liefert die Anzahl aller Variablen die mit lab beginnen

    Beste Gruesse
    brima

    Dienstag, 25. März 2014 14:58
  • Habs rausbekommen,bei mir nur mit - 1 weil so gewollt.

    function LabelEntfernen
    {
        $LCount=(Get-variable -name ("label*")).count
        $LCount = $LCount -1

        for ($i=1;$i -le $LCount; $i++)
        {
            (Get-variable -name ("label" + $i)).value.Visible = $False
        }
    }

    Dienstag, 25. März 2014 14:58
  • Hallo,

    du bist neu hier:

    Lies bitte noch folgenden Beitrag und handele danach. Danke.

    http://social.technet.microsoft.com/Forums/de-DE/88c1402f-774f-4414-a23e-90f9e45b8d8e/wozu-antworten-markieren-und-fr-beitrge-abstimmen?forum=powershell_de

    Beste Gruesse
    brima

    Dienstag, 25. März 2014 15:12
  • Hallo,

    jetzt hast Du nur deine Loesung als Antwort makiert. Der Sinn ist aber die Antowrten zu markieren, aus denen sich dann deine gesamt Loesung ergeben haben. :-) Damit den Helfenden das Helfen auch Spass macht.

    Man darf auch mehr als eine Antwort markieren. Das markieren eigeneer Antworten bringt im uebrigen keine Punkte. :-)

    Beste Gruesse
    brima

    Mittwoch, 26. März 2014 08:46
  • Hi,

    viel einfacher und kontrolierbarer ist es wenn man alle Controls (Label,Textbox etc. ) einer Form oder des Parent-Control aufzählen lässt und von denen dann die Eigenschaften bearbeitet. In deinem Fall z.b.

    #Wobei $Parentcontrol das Form, ein Panel,eine Groupbox, oder ein Tablelayoutpanel sein kann.
    foreach($Label in $($ParentControl.Controls |?{$_ -is [System.Windows.Forms.Label]})){
        $label.Visible = $false
    }

    Donnerstag, 27. März 2014 07:37