在Powershell中创建.NET 4(WinForms)动态表单控件

在Powershell中创建.NET 4(WinForms)动态表单控件,winforms,powershell,Winforms,Powershell,我正在尝试将表单控件动态添加到我在PowerShell中开发的gui中。我看过VB和C#示例,但似乎无法让我的表单实际使用新控件填充gui。我想要的是能够在表单中附加大量的附加控件,并且添加的控件会被转储到一个可滚动的字段中,这样它们就不会离开gui。我试图实现这一点的方法是在tablelayoutpanel中附加一个组合框。我的想法是,用一个新的combobox控件向tablelayoutpanel添加一个新行就可以实现这一点。所以我想我有两个问题: 这是一种逻辑上正确的方法,可以动态地将控件

我正在尝试将表单控件动态添加到我在PowerShell中开发的gui中。我看过VB和C#示例,但似乎无法让我的表单实际使用新控件填充gui。我想要的是能够在表单中附加大量的附加控件,并且添加的控件会被转储到一个可滚动的字段中,这样它们就不会离开gui。我试图实现这一点的方法是在tablelayoutpanel中附加一个组合框。我的想法是,用一个新的combobox控件向tablelayoutpanel添加一个新行就可以实现这一点。所以我想我有两个问题:

  • 这是一种逻辑上正确的方法,可以动态地将控件添加到允许滚动溢出的对象中吗
  • 如果#1为真,我如何完成此任务
  • 这是我尝试的最新迭代:

    $button1_Click={
        $new = New-Object System.Windows.Forms.ComboBox
        Add-ComboBox $rowCount
        $rowCount++
    }
    
    function Add-ComboBox {
        param([string] $rowCount)
        $combobox = New-Object System.Windows.Forms.ComboBox
        $combobox.Dock = [System.Windows.Forms.DockStyle]::Fill
        $combobox.Text = ""
        $combobox.Tag = "ComboBox$rowCount"
        $tablelayoutpanel1.Controls.Add($combobox, 1, $rowCount)
    }
    

    非常感谢您的帮助。

    这可能很有用,尽管它是WPF,但代码段会创建一个窗口,窗口上有几个按钮,根据添加到StackPanel的按钮数量调整大小

    $window = new-object System.Windows.Window
    $stackPanel = new-object System.Windows.Controls.StackPanel
    
    $buttonNum = 20
    for( $i = 0; $i -lt $buttonNum; $i++ )
    {
        $button = new-object System.Windows.Controls.Button
        $button.Content = "Button Text" + $i
        $stackPanel.Children.Add( $button )
    }
    
    $scrollViewer = new-object System.Windows.Controls.ScrollViewer
    $scrollViewer.Content = $stackPanel
    $window.Content = $scrollViewer
    
    $window.SizeToContent = [System.Windows.SizeToContent]::Width
    $window.Height = 100
    $window.ShowDialog()
    

    这可能很有用,尽管它是WPF,但代码段创建了一个窗口,窗口上有几个按钮,根据添加到StackPanel的按钮数量调整大小

    $window = new-object System.Windows.Window
    $stackPanel = new-object System.Windows.Controls.StackPanel
    
    $buttonNum = 20
    for( $i = 0; $i -lt $buttonNum; $i++ )
    {
        $button = new-object System.Windows.Controls.Button
        $button.Content = "Button Text" + $i
        $stackPanel.Children.Add( $button )
    }
    
    $scrollViewer = new-object System.Windows.Controls.ScrollViewer
    $scrollViewer.Content = $stackPanel
    $window.Content = $scrollViewer
    
    $window.SizeToContent = [System.Windows.SizeToContent]::Width
    $window.Height = 100
    $window.ShowDialog()
    

    我在微软Technet论坛上找到了答案。一位论坛主持人一直在帮我解决这个问题。谢谢你


    我在Microsoft Technet论坛上找到了答案。一位论坛主持人一直在帮我解决这个问题。谢谢你


    我在Windows 7上使用的是Windows PowerShell ISE 2.0,而您仅使用此代码就完成了我所描述的内容??当我运行代码时,我在调用空对象上的方法时出错。我在Windows 7上使用Windows PowerShell ISE 2.0,而您仅使用此代码来完成我描述的内容??当我运行代码时,我会在调用Null对象上的方法时出错。