如何为现有PowerShell GUI界面添加Tabs标签页功能
实现方法
要给现有PowerShell WinForm GUI加标签页,使用System.Windows.Forms.TabControl容器控件即可,步骤和修改后的完整代码如下:
核心修改逻辑
- 先创建
TabControl主容器,可设置为填充整个窗体,自动适配尺寸 - 分别创建多个
TabPage实例,每个实例对应一个标签页的内容区域 - 原有控件不再直接添加到主窗体的
Controls集合,改为添加到对应标签页的Controls集合 - 第二个标签页可以自由添加新的按钮等控件,绑定交互逻辑的方式和原有按钮完全一致
修改后的完整可运行代码
# 先加载WinForms程序集,避免运行报错 Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "testgui" $objForm.Size = New-Object System.Drawing.Size(350,680) $objForm.BackColor = "Black" $objForm.StartPosition = "CenterScreen" $objForm.FormBorderStyle = 'Fixed3D' $objForm.MaximizeBox = $false $objForm.KeyPreview = $True $objForm.Topmost = $false # ========== 新增标签页控件开始 ========== # 创建TabControl主容器 $tabControl = New-Object System.Windows.Forms.TabControl $tabControl.Dock = [System.Windows.Forms.DockStyle]::Fill # 填充整个主窗体 $tabControl.BackColor = "Black" $tabControl.ForeColor = "White" # 创建第一个标签页 $tabPage1 = New-Object System.Windows.Forms.TabPage $tabPage1.Text = "功能区1" $tabPage1.BackColor = "Black" # 创建第二个标签页 $tabPage2 = New-Object System.Windows.Forms.TabPage $tabPage2.Text = "功能区2" $tabPage2.BackColor = "Black" # 把两个标签页添加到TabControl $tabControl.TabPages.Add($tabPage1) $tabControl.TabPages.Add($tabPage2) # ========== 新增标签页控件结束 ========== # 原有按钮改为添加到第一个标签页,不再直接加在主窗体 $installed_button = New-Object system.windows.Forms.Button $installed_button.Text = "button 1" $installed_button.ForeColor = "White" $installed_button.backColor = "blue" $installed_button.Cursor = [System.Windows.Forms.Cursors]::Hand $installed_button.Width = 150 $installed_button.Height = 40 $installed_button.Add_Click({ start-process }) $installed_button.location = new-object system.drawing.point(10,50) # 原来是$obJForm.controls.Add,现在改成标签页1的controls $tabPage1.controls.Add($installed_button) $installed_button = New-Object system.windows.Forms.Button $installed_button.Text = "button 2" $installed_button.ForeColor = "White" $installed_button.backColor = "red" $installed_button.Cursor = [System.Windows.Forms.Cursors]::Hand $installed_button.Width = 150 $installed_button.Height = 40 $installed_button.Add_Click({ start-process }) $installed_button.location = new-object system.drawing.point(180,50) # 同样添加到标签页1 $tabPage1.controls.Add($installed_button) # ========== 第二个标签页新增控件示例 ========== $newTabBtn = New-Object system.windows.Forms.Button $newTabBtn.Text = "功能区2按钮" $newTabBtn.ForeColor = "White" $newTabBtn.backColor = "Green" $newTabBtn.Cursor = [System.Windows.Forms.Cursors]::Hand $newTabBtn.Width = 150 $newTabBtn.Height = 40 $newTabBtn.Add_Click({ # 这里写第二个标签页按钮的交互逻辑 [System.Windows.Forms.MessageBox]::Show("这是功能区2的按钮触发的提示") }) $newTabBtn.location = new-object system.drawing.point(10,50) # 添加到标签页2 $tabPage2.controls.Add($newTabBtn) # 最后把TabControl添加到主窗体 $objForm.controls.Add($tabControl) $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog()
注意事项
- 标签页内控件的坐标是相对于当前标签页的左上角,不是主窗体的左上角,布局的时候直接对应标签页的尺寸设置即可
- 后续要加更多标签页,只需要新建
TabPage实例,添加到$tabControl.TabPages集合即可 - 所有控件的事件绑定逻辑和原有写法完全一致,不需要额外调整
内容的提问来源于stack exchange,提问作者chkdsk
相关产品推荐
相关产品推荐

