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