【问题标题】:Trying to set properties on checkboxes in a for loop尝试在 for 循环中的复选框上设置属性
【发布时间】:2018-02-24 21:31:15
【问题描述】:

我一直试图自己找到这个,但我什至不完全确定如何表达这个问题。本质上,我在这里所做的是获取一组名称,然后为每个名称创建一个复选框。编辑:我认为下面的代码 sn-p 也可以工作,但看起来这可能实际上不起作用?

New-object System.Windows.Forms.CheckBox | New-Variable -Name ("checkbox" + $_)

我遇到的主要问题是:一旦创建了这些名为复选框的变量,我该如何实际设置它们的属性?本质上如何获取每次迭代的变量名,然后进行 $checkbox.margin 等设置。我已经在下面发布了我的整个脚本,它非常 WIP,而且我知道还有其他一些奇怪的东西,但我打算在我能解决这个问题后对其进行整理。

$form = New-Object System.Windows.Forms.Form
$flowlayoutpanel = New-Object System.Windows.Forms.FlowLayoutPanel
$buttonOK = New-Object System.Windows.Forms.Button


$usernames = "andrew", "beth", "charlie", "dave", "james", "george"
$totalvalues = ($usernames.count)

$formsize = 85 + (30 * $totalvalues)
$flowlayoutsize = 10 + (30 * $totalvalues)
$buttonplacement = 40 + (30 * $totalvalues)

$form_Load = {
    0..$totalvalues|%{
        New-object System.Windows.Forms.CheckBox | New-Variable -Name ("checkbox" + $_)
        ('$checkbox' + $_).Margin = '10, 8, 0, 0'
        $checkbox.Margin = '10, 8, 0, 0'
        $checkbox.Name = 'checkbox' + $_
        $checkbox.Size = '200, 22'
        $checkbox.Text = "" + $usernames[$_]
        $checkbox.TextAlign = 'MiddleLeft'
        $flowlayoutpanel.Controls.Add($checkbox)
    }       
}


$form.Controls.Add($flowlayoutpanel)
$form.Controls.Add($buttonOK)
$form.AcceptButton = $buttonOK
$form.AutoScaleDimensions = '8, 17'
$form.AutoScaleMode = 'Font'
$form.ClientSize = "500 , $formsize"
$form.FormBorderStyle = 'FixedDialog'
$form.Margin = '5, 5, 5, 5'
$form.MaximizeBox = $False
$form.MinimizeBox = $False
$form.Name = 'form1'
$form.StartPosition = 'CenterScreen'
$form.Text = 'Form'
$form.add_Load($form_Load)

$flowlayoutpanel.BorderStyle = 'FixedSingle'
$flowlayoutpanel.Location = '48, 13'
$flowlayoutpanel.Margin = '4, 4, 4, 4'
$flowlayoutpanel.Name = 'flowlayoutpanel1'
$flowlayoutpanel.Size = "400, $flowlayoutsize"
$flowlayoutpanel.TabIndex = 1


$buttonOK.Anchor = 'Bottom, Right'
$buttonOK.DialogResult = 'OK'
$buttonOK.Location = "383, $buttonplacement"
$buttonOK.Margin = '4, 4, 4, 4'
$buttonOK.Name = 'buttonOK'
$buttonOK.Size = '100, 30'
$buttonOK.TabIndex = 0
$buttonOK.Text = '&OK'


$form.ShowDialog()

【问题讨论】:

    标签: winforms powershell loops checkbox


    【解决方案1】:

    用这段代码替换你的 foreacheach 循环

    $form_Load = {
        foreach($user in $usernames){
            $DynamicCheckBox = New-Variable -Name ("checkbox" + $user)
            $DynamicCheckBox = New-object System.Windows.Forms.CheckBox
    
            $DynamicCheckBox.Margin = '10, 8, 0, 0'
            $DynamicCheckBox.Name = 'checkbox' + $_
            $DynamicCheckBox.Size = '200, 22'
            $DynamicCheckBox.Text = "" + $user
            $DynamicCheckBox.TextAlign = 'MiddleLeft'
            $flowlayoutpanel.Controls.Add($DynamicCheckBox)
        }       
    }
    

    【讨论】:

    • 谢谢,如果我这样做,一旦点击 OK 按钮,检查复选框状态的最佳方法是什么?或者这应该是一个单独的问题?
    • 请单独提问。如果这解决了您的问题,请将其标记为答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多