Powershell 使用数组或变量命名textbox对象

Powershell 使用数组或变量命名textbox对象,powershell,textbox,richtextbox,Powershell,Textbox,Richtextbox,我正在开发一个显示未知数量文本框的程序。 这些文本框稍后将显示关于不同服务器的数据(例如ping数据) 这是未知的,因为我不知道有多少服务器将在工作,他们将自动从列表中选择。。。它可以是2、3或15。 文本框将出现在一个新窗口中,该窗口的大小取决于服务器的数量。 问题是,我在以后的程序中很难引用文本框 我的第一次尝试是: 创建了显示文本框的函数: function c_inputbox ($iname, $iposx, $iposy, $isizex, $isizey) { $iname

我正在开发一个显示未知数量文本框的程序。 这些文本框稍后将显示关于不同服务器的数据(例如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
包含服务器数量):

因此,现在数组应该包含“textbox1”、“textbox2”等。然后我尝试再次调用它们,将它们定义为textbox对象:

$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 无法索引到空数组中。
+$objform1.Controls.Add($textbox[创建控件并将其分配给局部变量,根据需要进行配置,然后在将其添加到
表单之前将其添加到数组中。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])

}

现在您可以使用
$textboxs
来引用框,或者
$textboxs[$index]
来引用特定的框

您能告诉我们您最初是如何使用
$textbox
的吗?在
$textbox[$i]之前,您是否对其进行声明或分配了任何内容=新对象System.Windows.Forms.RichTextBox
?我尝试用名称填充数组,将代码添加到原始帖子中。我认为您可能过度复杂了一些。是的,我做了……您的解决方案很简单,效果很好。
$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])

}