title: PowerShell .NET Navigating within forms
body: <p>When one creates a form and wants to navigate by clicking a button on that form, is it needed to create a whole new form to bring up the next page? Or can the current form be reinitialized in some way with other buttons on it?</p>
  
  <p>When clicking the button 'Active Directory' you can see that the form is reloading or redrawing itself. As I'm not really experienced with this and information on navigation within forms is difficult to find, it would be nice if someone could tell me if this is the way to do it properly?</p>
  
  <p>Because every time you go into a menu, you need to create a totally new form which makes room for errors, as you want things (like 'not able to maximize, icon, title bar, exit button, back button, ...') to be the same all over the different windows. </p>
  
  <p>For the second window, 'Active Directory' I tried things like <code>StartPosition = 'CenterParent'</code> but this didn't work as it showed up on a totally different spot then it's parent closed.</p>
  
  <p>Thanks you for your help.</p>
  
  <p><strong>The code:</strong></p>
  
  <pre><code>[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()
  </code></pre>