【问题标题】:How to display multilined formatted hashtable in a WinForms label in PowerShell如何在 PowerShell 的 WinForms 标签中显示多行格式化的哈希表
【发布时间】:2016-10-19 05:02:42
【问题描述】:

我有一个简单的 WinForms 表单对象,它附加了一个标签,我从一个简单的后端以多个哈希表的形式(实际上是一个哈希表数组)加载文本。

我有一个文本文件,其中预加载了以下格式的信息:

@{Key1='Value1x'; Key2='Value1y'; Key3='Value1z'}
@{Key1='Value2x'; Key2='Value2y'; Key3='Value2z'}
@{Key1='Value3x'; Key2='Value3y'; Key3='Value3z'}

我将其附加到这样的变量中:

$hashArray = Get-Content $env:ProgramData\Path\BackEnd.txt | Out-String | iex

这使我可以将信息作为哈希表和数组(有点)来处理。

为方便起见,这是我的 WinForm 模型:

[void][Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')

$form = New-Object Windows.Forms.Form
$form.Size = '850,500'
$form.StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen

$hTA = New-Object Windows.Forms.Label
$hTA.Size = '500,400'
$hTA.Location = '50,50'

$ht = Get-Content $env:ProgramData\Path\BackEnd.txt | Out-String | iex

$hTA.Text = "{0} {1} {2}" -f $ht.Key1[0], $ht.Key2[0], $ht.Key3[0]
            "{0} {1} {2}" -f $ht.Key1[1], $ht.Key2[1], $ht.Key3[1]
            "{0} {1} {2}" -f $ht.Key1[2], $ht.Key2[2], $ht.Key3[2]

$form.Controls.Add($hTA)
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()

在那种格式下,唯一显示的是:

Value1x Value1y Value1z

我认为这可能是该特定控件项 (Windows.Forms.Label) 的多行问题,因此我将 $hTA.Text 的分配替换为多行 Here-String

$hTA.Text = @"
    Test1
    Test2
    Test3
"@

这显示正确,显示每一行。

我尝试了一个下划线转义字符 (`n),但这没有任何区别。

我不太清楚它为什么这样做,所以,我转向 SO。

更糟糕的情况是,我总是可以创建几个单行标签对象并将它们堆叠在一起,但是,我认为这不是最好的方法。

【问题讨论】:

    标签: winforms powershell label hashtable


    【解决方案1】:

    我刚刚想通了。当我开始思考text 属性如何读取分隔符以知道何时结束属性分配时,我意识到了这一点。

    看到$hTA.Text 条目下方有两行悬停,这似乎很明显。

    我做了什么让它工作是这样的:

    $hTA.Text =    "{0} {1} {2}" -f $ht.Key1[0], $ht.Key2[0], $ht.Key3[0]
    $hTA.Text += "`n{0} {1} {2}" -f $ht.Key1[1], $ht.Key2[1], $ht.Key3[1]
    $hTA.Text += "`n{0} {1} {2}" -f $ht.Key1[2], $ht.Key2[2], $ht.Key3[2]
    

    显示如下:

    Value1x Value1y Value1z
    Value2x Value2y Value2z
    Value3x Value3y Value3z
    

    我想我可以把它留在这里以供后代使用。其他人可能会遇到类似的问题。

    【讨论】:

      【解决方案2】:

      你想要的可以用一个格式字符串来完成,像这样:

      $fmt = "{0} {1} {2}`n{3} {4} {5}`n{6} {7} {8}"
      $hTA.Text = $fmt -f $ht.Key1[0], $ht.Key2[0], $ht.Key3[0],
                          $ht.Key1[1], $ht.Key2[1], $ht.Key3[1],
                          $ht.Key1[2], $ht.Key2[2], $ht.Key3[2]
      

      或者像这样:

      $fmt = "{0} {3} {6}`n{1} {4} {7}`n{2} {5} {8}"
      $hTA.Text = $fmt -f ($ht.Key1[0..2] + $ht.Key2[0..2] + $ht.Key3[0..2])
      

      【讨论】:

        猜你喜欢
        • 2014-01-25
        • 2012-03-21
        • 1970-01-01
        • 2018-09-24
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        相关资源
        最近更新 更多