使用数组或变量命名文本框对象

时间:2016-01-05 17:54:35

标签: powershell textbox richtextbox

我正在开发一个显示未知数量文本框的程序。 这些文本框稍后将显示有关不同服务器的数据(例如ping数据) 这是未知的,因为我不知道有多少台服务器在工作,它们将自动从列表中选择......它可以是2,3或15。 文本框将显示在一个新窗口中,该窗口的大小根据服务器的数量而定。 问题是我在程序的后期引用文本框时遇到了困难。

我的第一次尝试是:

创建了一个显示文本框的函数:

function c_inputbox ($iname, $iposx, $iposy, $isizex, $isizey)
{
   $iname = New-Object System.Windows.Forms.richTextBox 
   $iname.Location = New-Object System.Drawing.Size($iposx, $iposy) 
   $iname.Size = New-Object System.Drawing.Size($isizex, $isizey) 
   $iname 
}

然后我生成文本框,$objform1是主窗口,$x$y是用于将文本框放在列中的变量:

foreach ($srv in $stringArray)
{
   $name = "textbox" + $i   
   $objform1.Controls.Add((c_inputbox $name $x ($y + 20)  350 100))
   $i ++
}

它会显示我想要的文本框,但引用.text属性不再起作用。我尝试了几种测试方法:

$textbox1.text = "test"
$name.text = "test"

我的第二次尝试是将名称存储在一个数组中,我甚至尝试用名称填充数组,然后声明texbox($length包含服务器数量):

$j = 1
for ($j; $j -le $length; $j++)
{
   $textbox[$j] = "textbox" + $j
}

所以现在数组应该包含" textbox1"," textbox2"等等。然后我再次调用它们将它们定义为文本框对象:

$textbox[$i] = New-Object System.Windows.Forms.richTextBox 
$textbox[$i].Location = New-Object System.Drawing.Size($positionx, $positiony) 
$textbox[$i].Size = New-Object System.Drawing.Size(350, 100) 
$objform1.Controls.Add($textbox[$i])

但PowerShell再次发出错误:

Cannot index into a null array.
+              $objform1.Controls.Add($textbox[ <<<< $i])
    + CategoryInfo          : InvalidOperation: (1:Int32) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

知道如何实现这一目标,或者甚至可以在PowerShell中实现吗?

1 个答案:

答案 0 :(得分:2)

创建控件并将其分配给局部变量,根据需要进行配置,然后将其添加到数组中,然后再将其添加到Form.Controls

$TextBoxes = @()
for($i = 0; $i -lt $stringArray.Count; $i++)
{
    # Create the textbox
    $name = "textbox$i"
    $textBox = c_inputbox $name $x ($y + 20)  350 100

    # Customise it
    $textBox.Text = $stringArray[$i]

    # Add to array
    $TextBoxes += $textBox

    # Add to Form Controls, index -1 is the last item in the array 
    $objform1.Controls.Add($TextBoxes[-1])

}

现在您可以使用$TextBoxes来引用这些框,或$TextBoxes[$index]来引用特定的框