如何在PowerShell中的WinForms标签中显示多行格式的哈希表

时间:2016-10-19 05:02:43

标签: winforms powershell label hashtable

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

我有一个文本文件,其中包含预先加载的信息,格式如下:

skiprows

我附加到这样的变量:

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

这允许我将信息作为哈希表和数组(等等)来处理。

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

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

在该格式中,唯一显示的是:

[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 "@ ),但没有区别。

我不太确定为什么会这样做,所以,我转向了。

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

2 个答案:

答案 0 :(得分:0)

我只是想通了。当我开始考虑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

我想我可以把这个留给后代。其他人可能会遇到类似的问题。

答案 1 :(得分:0)

您可以使用单个格式字符串完成所需的操作,如下所示:

$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])