none
Fortlaufende Zahl in Schleife verwenden (WPF Textblock) RRS feed

  • Frage

  • Moin Kollegen,

    ich versuche eine fortlaufende Zahl an einer bestimmten Stellen einzufügen, leider versteht PS nicht was ich will. Grundätzlich will ich wärend der Laufzeit der Schleife, die Werte den TextBlöcken zuweisen. Mir gehts um folgende Stelle:

            $Array = '22','44','66'
            
            $i = 0
            foreach ($Num in $Array){
                $i++ #fortlaufende Zahl, die ...
                $window.c($i).Text = $Num #hier verwendet werden soll
    
                # sodass das hier herauskommt
                # $window.c1.Text = $Num
                # $window.c2.Text = $Num
                # $window.c3.Text = $Num
            }

    Variable $i zählt hoch und soll in $window.c.Text direkt hinter dem c eingefügt werden, sodass nur der Zahlenwert interpretiert wird.

    Hier der komplette Code:

    function Convert-XAMLtoWindow
    {
        param
        (
            [Parameter(Mandatory=$true)]
            [string]
            $XAML,
            
            [string[]]
            $NamedElements,
            
            [switch]
            $PassThru
        )
        
        Add-Type -AssemblyName PresentationFramework
        
        $reader = [System.XML.XMLReader]::Create([System.IO.StringReader]$XAML)
        $result = [System.Windows.Markup.XAMLReader]::Load($reader)
        foreach($Name in $NamedElements)
        {
            $result | Add-Member NoteProperty -Name $Name -Value $result.FindName($Name) -Force
        }
        
        if ($PassThru)
        {
            $result
        }
        else
        {
            $result.ShowDialog()
        }
    }
    
    $xaml = @'
    <Window
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       MinHeight="350" MaxHeight="350"
       MinWidth="350" MaxWidth="350"
       SizeToContent="Height"
       Title="WPF TEST"
       Topmost="True">
        <Grid Background="#FFE5F0D3">
            <Button Name="b1" Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75"/>
            <TextBlock HorizontalAlignment="Left" Margin="135,10,0,0" TextWrapping="Wrap" Text="CPU" VerticalAlignment="Top"/>
    
            <TextBlock HorizontalAlignment="Left" Margin="10,38,0,0" TextWrapping="Wrap" Text="Host1" VerticalAlignment="Top"/>
            <TextBlock Name="c1" HorizontalAlignment="Left" Margin="135,38,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
    
            <TextBlock HorizontalAlignment="Left" Margin="10,59,0,0" TextWrapping="Wrap" Text="Host2" VerticalAlignment="Top"/>
            <TextBlock Name="c2" HorizontalAlignment="Left" Margin="135,59,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
    
            <TextBlock HorizontalAlignment="Left" Margin="10,80,0,0" TextWrapping="Wrap" Text="Host3" VerticalAlignment="Top"/>
            <TextBlock Name="c3" HorizontalAlignment="Left" Margin="135,80,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
    
        </Grid>
    </Window>
    '@
    
    $window = Convert-XAMLtoWindow -XAML $xaml -NamedElements 'b1', 'c1', 'c2', 'c3' -PassThru
    
    
    
    $window.b1.add_Click(
        {
            [System.Object]$sender = $args[0]
            [System.Windows.RoutedEventArgs]$e = $args[1]   
            $Array = '22','44','66'
            
            $i = 0
            foreach ($Num in $Array){
                $i++ #fortlaufende Zahl, die ...
                $window.c($i).Text = $Num #hier verwendet werden soll
    
                # sodass das hier herauskommt
                # $window.c1.Text = $Num
                # $window.c2.Text = $Num
                # $window.c3.Text = $Num
            }
        }
    )
    
    $window.ShowDialog() | Out-Null

    Vielen Dank

    Mittwoch, 20. Januar 2016 12:17

Antworten

  • Hallo,

    so sollte dein erster Ansatz funktionieren.

    $window.c($i).Text = $Num

    ersetzen durch

    $window.$("c$i").Text = $Num
    

    Beste Gruesse
    brima


    • Bearbeitet brima Mittwoch, 20. Januar 2016 13:21
    • Als Antwort markiert psott Mittwoch, 20. Januar 2016 13:24
    Mittwoch, 20. Januar 2016 13:14

Alle Antworten

  • Knoten im Kopf lässt grüßen,

    hier die Lösung, "c" und $i vorher zusammenbauen:

                $i++ #fortlaufende Zahl, die ...
                
                $c1 = 'c' + $i
    
                $window.$c1.Text = $Num #hier verwendet werden soll
    
                # sodass das hier herauskommt
                # $window.c1.Text = $Num
                # $window.c2.Text = $Num
                # $window.c3.Text = $Num

    • Als Antwort markiert psott Mittwoch, 20. Januar 2016 13:02
    • Tag als Antwort aufgehoben psott Mittwoch, 20. Januar 2016 13:25
    Mittwoch, 20. Januar 2016 13:02
  • Hallo,

    so sollte dein erster Ansatz funktionieren.

    $window.c($i).Text = $Num

    ersetzen durch

    $window.$("c$i").Text = $Num
    

    Beste Gruesse
    brima


    • Bearbeitet brima Mittwoch, 20. Januar 2016 13:21
    • Als Antwort markiert psott Mittwoch, 20. Januar 2016 13:24
    Mittwoch, 20. Januar 2016 13:14
  • Danke brima, das spart den kleinen Umweg
    Mittwoch, 20. Januar 2016 13:25