使用数组或变量命名文本框对象
Use array or variable for naming textbox object
我正在开发一个显示了未知数量文本框的程序。
这些文本框稍后将显示有关不同服务器的数据(例如 ping 数据)
这是未知的,因为我不知道有多少台服务器在工作,它们会从列表中自动选择……可以是 2、3 或 15。
文本框将出现在根据服务器数量调整大小的新 window 中。
问题是我在稍后的程序中引用文本框时遇到困难。
我的第一次尝试是这样的:
创建了一个函数来显示文本框:
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
是主要的 window,$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"
我的第二次尝试是将名称存储在数组中,我什至尝试在声明文本框之前用名称填充数组($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 再次 returns 出错:
Cannot index into a null array.
+ $objform1.Controls.Add($textbox[ <<<< $i])
+ CategoryInfo : InvalidOperation: (1:Int32) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
知道如何做到这一点,或者是否可以在 PowerShell 中做到这一点?
创建控件并将其分配给局部变量,根据需要对其进行配置,然后将其添加到数组中,然后再添加到 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]
来引用特定的框
我正在开发一个显示了未知数量文本框的程序。 这些文本框稍后将显示有关不同服务器的数据(例如 ping 数据) 这是未知的,因为我不知道有多少台服务器在工作,它们会从列表中自动选择……可以是 2、3 或 15。 文本框将出现在根据服务器数量调整大小的新 window 中。 问题是我在稍后的程序中引用文本框时遇到困难。
我的第一次尝试是这样的:
创建了一个函数来显示文本框:
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
是主要的 window,$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"
我的第二次尝试是将名称存储在数组中,我什至尝试在声明文本框之前用名称填充数组($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 再次 returns 出错:
Cannot index into a null array. + $objform1.Controls.Add($textbox[ <<<< $i]) + CategoryInfo : InvalidOperation: (1:Int32) [], RuntimeException + FullyQualifiedErrorId : NullArray
知道如何做到这一点,或者是否可以在 PowerShell 中做到这一点?
创建控件并将其分配给局部变量,根据需要对其进行配置,然后将其添加到数组中,然后再添加到 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]
来引用特定的框