2015-01-05 20 views
0

当创建表单并希望通过单击该表单上的按钮进行导航时,是否需要创建一个全新的表单来显示下一页?或者当前窗体可以通过其他按钮以某种方式重新初始化?PowerShell .NET在表单中导航

当点击按钮“Active Directory”时,您可以看到表单正在重新加载或重绘本身。由于我对这方面并没有真正的经验,并且很难找到有关表单内导航的信息,如果有人能告诉我这是否正确地做到这一点,那将会很好。因为每次进入菜单时,都需要创建一个全新的表单,为错误留出空间,因为你想要的东西(比如'不能最大化,图标,标题栏,退出按钮,后退按钮, ...')在不同的窗口中都是相同的。

对于第二个窗口'Active Directory',我尝试了StartPosition = 'CenterParent'之类的东西,但是这不起作用,因为它显示在一个完全不同的位置上,然后它是父项关闭。

谢谢你的帮助。

代码:

[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') 
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') 
[void] [System.Windows.Forms.Application]::EnableVisualStyles() 
$WindowTitle = 'Script center' 
$Title = 'Welcome to Script Center' 
$Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe") 
$Image = [system.drawing.image]::FromFile("S:\Prod\Script center\Background.jpg") 

# Main menu 
$MenuBox = New-Object System.Windows.Forms.Form 
$MenuBox.Size = New-Object System.Drawing.Size @(650,450) 
$MenuBox.Text = $WindowTitle 
$MenuBox.StartPosition = 'CenterScreen' 
$MenuBox.MaximizeBox = $False 
$MenuBox.AutoSize = $False 
$MenuBox.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D 
$MenuBox.Icon = $Icon 
$MenuBox.BackgroundImage = $Image 
$MenuBox.BackgroundImageLayout = 'None' # None, Tile, Center, Stretch, Zoom 

# Exit Button 
$ExitButton = New-Object System.Windows.Forms.Button 
$ExitButton.Location = New-Object System.Drawing.Size(540,370) 
$ExitButton.Size = New-Object System.Drawing.Size(75,23) 
$ExitButton.Text = 'Exit' 
$ExitButton.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",11,0,3,1) 
$ExitButton.Add_Click({ 
    Remove-Item "$WorkingDirectory\Temp\*.*" -Force 
    $MenuBox.Close() 
}) 

# Main menu Header Text 
$MenuHeader = New-Object System.Windows.Forms.Label 
$MenuHeader.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,1) 
$MenuHeader.Location = New-Object System.Drawing.Size(118,20) 
$MenuHeader.Size = New-Object System.Drawing.Size(380,40) 
$MenuHeader.Text = $Title 
$MenuHeader.BackColor = 'Transparent' 
$MenuHeader.TextAlign = [System.Drawing.ContentAlignment]::TopCenter 
$MenuBox.Controls.Add($MenuHeader) 

# Main menu 
$BoxLabel = New-Object System.Windows.Forms.Label 
$BoxLabel.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",10,0,3,1) 
$BoxLabel.Location = New-Object System.Drawing.Size(10,60) 
$BoxLabel.Size = New-Object System.Drawing.Size(680,20) 
$BoxLabel.Text = 'Select the category:' 
$BoxLabel.BackColor = 'Transparent' 
$MenuBox.Controls.Add($BoxLabel) 

# AD menu 
$ADBox = New-Object System.Windows.Forms.Form 
$ADBox.Size = New-Object System.Drawing.Size @(650,450) 
$ADBox.Text = $WindowTitle 
$ADBox.StartPosition = 'CenterParent' 
$ADBox.AutoSize = $False 
$ADBox.MaximizeBox = $False 
$ADBox.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D 
$ADBox.Icon = $Icon 
$ADBox.BackgroundImage = $Image 

# AD button 1 
$ADButton1 = New-Object System.Windows.Forms.Button 
$ADButton1.Location = New-Object System.Drawing.Size(62,160) 
$ADButton1.Size = New-Object System.Drawing.Size(500,30) 
$ADButton1.Add_Click({ 
    $global:ButtonResult = 'Result: AD Button 1' 
    $MenuBox.Close() 
}) 
$ADButton1.Text = 'AD Button 1' 
$ADButton1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1) 
$ADBox.Controls.Add($ADButton1) 
$ADBox.Controls.Add($ExitButton) 

# Main menu button 1 
$Button2 = New-Object System.Windows.Forms.Button 
$Button2.Location = New-Object System.Drawing.Size(62,100) 
$Button2.Size = New-Object System.Drawing.Size(500,30) 
$Button2.Add_Click({ 
    # Call Sub menu 1 
    $MenuBox.Close() 
    $MenuBox.Dispose() 
    $ADBox.Topmost = $True 
    $ADBox.Add_Shown({$ADBox.Activate()}) 
    [void] $ADBox.ShowDialog() 
}) 
$Button2.Text = 'Active directory' 
$Button2.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1) 
$MenuBox.Controls.Add($Button2) 

# Main menu button 2 
$Button1 = New-Object System.Windows.Forms.Button 
$Button1.Location = New-Object System.Drawing.Size(62,160) 
$Button1.Size = New-Object System.Drawing.Size(500,30) 
$Button1.Add_Click({ 
    $global:ButtonResult = 'Result: Button 1' 
    $MenuBox.Close() 
}) 
$Button1.Text = 'Files and Folders' 
$Button1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",12,0,3,1) 
$MenuBox.Controls.Add($Button1) 

$MenuBox.Controls.Add($ExitButton) 

# Show Menu 
$MenuBox.Topmost = $True 
$MenuBox.Add_Shown({$MenuBox.Activate()}) 
[void] $MenuBox.ShowDialog() 
+0

虽然这是所有可能使用PowerShell,我想知道你是否应该用Visual Studio和适当的表单设计器来做这件事,因为它听起来相当复杂。在这种情况下,我认为最好在导航过程中显示/隐藏单个窗体中的多个面板 – arco444

+0

谢谢arco444,我刚刚发现[this](http://stackoverflow.com/questions/14038772)/how-to-hide-tabs-on-powershell-gui)作为关于如何使用面板的示例。我仍然试图弄清楚。与此同时,我还将看看Visual Studio,看看使用此工具创建适当的表单是否更容易。 – DarkLite1

回答

0

我做自己的东西,希望这对你有用的家伙:

Function Open-Form { 

[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null 
[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null 
[System.Windows.Forms.Application]::EnableVisualStyles() | Out-Null 

$Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + '\powershell.exe') 
$Image = [system.drawing.image]::FromFile('S:\Prod\Script center\Background.jpg') 

$PanelLocation = New-Object System.Drawing.Point(122,60) 
$PanelSize = New-Object System.Drawing.Size(535,390) 
$ButtonSize = New-Object System.Drawing.Size(100,35) 
$PanelBackColor = [System.Drawing.Color]::CornflowerBlue 

# Navigation 
$ButtonHome_OnClick = {$PanelHome.Visible=$true;$PanelAD.Visible = $false;$PanelFF.Visible = $false;$PanelAbout=$false} 
$ButtonAD_OnClick = {$PanelHome.Visible=$false;$PanelAD.Visible = $true;$PanelFF.Visible = $false;$PanelAbout=$false} 
$ButtonFF_OnClick = {$PanelHome.Visible=$false;$PanelAD.Visible = $false;$PanelFF.Visible = $True;$PanelAbout=$false} 
$ButtonAbout_OnClick = {$PanelHome.Visible=$false;$PanelAD.Visible = $false;$PanelFF.Visible = $false;$PanelAbout=$true} 

$Form = New-Object System.Windows.Forms.Form 
$Form.StartPosition = 'CenterScreen' 
$Form.ClientSize = New-Object System.Drawing.Size(665,474) 
$Form.MaximizeBox = $False 
$Form.AutoSize = $False 
$Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D 
$Form.Icon = $Icon 
$Form.BackgroundImage = $Image 
$Form.Text = 'Script Center' 
$Form.TopMost = $True 
$Form.add_Load($handler_form1_Load) 

$TextTop = New-Object System.Windows.Forms.Label 
$TextTop.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,1) 
$TextTop.Location = New-Object System.Drawing.Point(1,20) 
$TextTop.Size = New-Object System.Drawing.Size(380,40) 
$TextTop.Text = 'Welcome to Script Center' 
$TextTop.BackColor = 'Transparent' 
$TextTop.TextAlign = [System.Drawing.ContentAlignment]::TopCenter 
$Form.Controls.Add($TextTop) 

$ButtonHome = New-Object System.Windows.Forms.Button 
$ButtonHome.Text = 'Home' 
$ButtonHome.TabIndex = 2 
$ButtonHome.UseVisualStyleBackColor = $True 
$ButtonHome.add_Click($ButtonHome_OnClick) 
$ButtonHome.Location = New-Object System.Drawing.Point(8,60) 
$ButtonHome.Size = $ButtonSize 
$Form.Controls.Add($ButtonHome) 

$ButtonAD = New-Object System.Windows.Forms.Button 
$ButtonAD.Text = 'Active Directory' 
$ButtonAD.TabIndex = 3 
$ButtonAD.UseVisualStyleBackColor = $True 
$ButtonAD.add_Click($ButtonAD_OnClick) 
$ButtonAD.Location = New-Object System.Drawing.Point(8,100) 
$ButtonAD.Size = $ButtonSize 
$Form.Controls.Add($ButtonAD) 

$ButtonFF = New-Object System.Windows.Forms.Button 
$ButtonFF.Text = 'Files and Folders' 
$ButtonFF.TabIndex = 4 
$ButtonFF.UseVisualStyleBackColor = $True 
$ButtonFF.add_Click($ButtonFF_OnClick) 
$ButtonFF.Location = New-Object System.Drawing.Point(8,140) 
$ButtonFF.Size = $ButtonSize 
$Form.Controls.Add($ButtonFF) 

$ButtonAbout = New-Object System.Windows.Forms.Button 
$ButtonAbout.Text = 'About' 
$ButtonAbout.TabIndex = 7 
$ButtonAbout.UseVisualStyleBackColor = $True 
$ButtonAbout.add_Click($ButtonAbout_OnClick) 
$ButtonAbout.Location = New-Object System.Drawing.Point(8,414) 
$ButtonAbout.Size = $ButtonSize 
$Form.Controls.Add($ButtonAbout) 

# Panel 1: Home 
$PanelHome = New-Object System.Windows.Forms.Panel 
$PanelHome.Location = $PanelLocation 
$PanelHome.Size = $PanelSize 
$PanelHome.TabIndex = 8 
#$PanelHome.BackgroundImage = $Image 
#$PanelHome.BackgroundImageLayout = 'Zoom' # None, Tile, Center, Stretch, Zoom 
$PanelHome.BackColor = $PanelBackColor 
$PanelHome.BorderStyle = [System.Windows.Forms.BorderStyle]::Fixed3D 
$Form.Controls.Add($PanelHome) 

# Panel 2: Active Directory 
$PanelAD = New-Object System.Windows.Forms.Panel 
$PanelAD.Location = $PanelLocation 
$PanelAD.Size = $PanelSize 
$PanelAD.TabIndex = 8 
$PanelAD.BorderStyle = [System.Windows.Forms.BorderStyle]::Fixed3D 
$Form.Controls.Add($PanelAD) 

$PanelADTabControl = New-object System.Windows.Forms.TabControl 
$PanelADTabControl.TabIndex = 4 
$PanelADTabControl.SelectedIndex = 0 
$PanelADTabControl.Location = New-Object System.Drawing.Point(0,0) 
$PanelADTabControl.Size = New-Object System.Drawing.Size(535,390) 
$PanelAD.Controls.Add($PanelADTabControl) 

$PanelADTab1 = New-Object System.Windows.Forms.TabPage 
$PanelADTab1.Location = New-Object System.Drawing.Point(0,0) 
$PanelADTab1.Size = New-Object System.Drawing.Size(205,445) 
$PanelADTab1.TabIndex = 2 
$PanelADTab1.Text = 'Users without manager' 
$PanelADTab1.UseVisualStyleBackColor = $True 
$PanelADTab1.BackColor = $PanelBackColor 
$PanelADTabControl.Controls.Add($PanelADTab1) 

$PanelADTab2 = New-Object System.Windows.Forms.TabPage 
$PanelADTab2.Location = New-Object System.Drawing.Point(4,22) 
$PanelADTab2.Size = New-Object System.Drawing.Size(205,445) 
$PanelADTab2.TabIndex = 2 
$PanelADTab2.Text = 'Inconsistencies' 
$PanelADTab2.UseVisualStyleBackColor = $True 
$PanelADTab2.BackColor = $PanelBackColor 
$PanelADTabControl.Controls.Add($PanelADTab2) 

# Panel 3: Files and Folders 
$PanelFF = New-Object System.Windows.Forms.Panel 
$PanelFF.Location = $PanelLocation 
$PanelFF.Size = $PanelSize 
$PanelFF.TabIndex = 8 
$PanelFF.BackColor = $PanelBackColor 
$PanelFF.BorderStyle = [System.Windows.Forms.BorderStyle]::Fixed3D 
$Form.Controls.Add($PanelFF) 

$PanelFFTxt = New-Object System.Windows.Forms.Label 
#$PanelFFTxt.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",14,1,3,1) 
$PanelFFTxt.Location = New-Object System.Drawing.Point(1,20) 
$PanelFFTxt.Size = New-Object System.Drawing.Size(380,40) 
$PanelFFTxt.Text = 'This is the panel for Files and Folders' 
$PanelFFTxt.BackColor = 'Transparent' 
$PanelFFTxt.TextAlign = [System.Drawing.ContentAlignment]::TopCenter 
$PanelFF.Controls.Add($PanelFFTxt) 

# Panel X: About 
$PanelAbout = New-Object System.Windows.Forms.Panel 
$PanelAbout.Location = $PanelLocation 
$PanelAbout.Size = $PanelSize 
$PanelAbout.TabIndex = 8 
$PanelAbout.BackColor = $PanelBackColor 
$PanelAbout.BorderStyle = [System.Windows.Forms.BorderStyle]::Fixed3D 
$Form.Controls.Add($PanelAbout) 

$ProgressBar = New-Object System.Windows.Forms.ProgressBar 
$ProgressBar.Location = New-Object System.Drawing.Point(589,458) 
$ProgressBar.Size = New-Object System.Drawing.Size(75,15) 
$ProgressBar.TabIndex = 0 
$Form.Controls.Add($ProgressBar) 

$StatusBar = New-Object System.Windows.Forms.StatusBar 
$StatusBar.Text = 'StatusBar' 
$StatusBar.Location = New-Object System.Drawing.Point(0,456) 
$StatusBar.Size = New-Object System.Drawing.Size(665,18) 
$StatusBar.TabIndex = 1 
$Form.Controls.Add($StatusBar) 

$Form.ShowDialog()| Out-Null 
} 

Open-Form