Public/Show-MainForm.ps1
function Show-MainForm { # Load configuration $FilePath = Join-Path -Path (Get-Module -Name "PSProfileMigrationAssistant" -ListAvailable).ModuleBase -ChildPath "Public\Config\Config.ini" $Config = Read-Config -FilePath $FilePath # Extract values from the configuration $AppName = $Config.Variables.AppName $SupportURL = $Config.Variables.SupportURL $IconBase64 = $Config.Images.ApplicationIcon $ImagePath = $Config.Images.BackgroundImage $Description = @( $Config.Description.Text1, $Config.Description.Text2, $Config.Description.Text3, $Config.Description.Text4, $Config.Description.Text5, $Config.Description.Text6 ) # Load assemblies and enable visual styles [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [System.Windows.Forms.Application]::EnableVisualStyles() # Create form $form1 = New-Object System.Windows.Forms.Form $form1.Text = $AppName $form1.Size = New-Object System.Drawing.Size(600, 400) $form1.StartPosition = "CenterScreen" $form1.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedDialog $form1.MaximizeBox = $false if (Test-Path $IconBase64) { $form1.Icon = New-Object System.Drawing.Icon($IconBase64) } # Add image to form $pictureBox = New-Object System.Windows.Forms.PictureBox $pictureBox.ImageLocation = $ImagePath $pictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::StretchImage $pictureBox.Size = New-Object System.Drawing.Size(200, 400) $pictureBox.Location = New-Object System.Drawing.Point(0, 0) $form1.Controls.Add($pictureBox) # Add description box $richTextBoxDescription = New-Object System.Windows.Forms.RichTextBox $richTextBoxDescription.Location = New-Object System.Drawing.Point(220, 10) $richTextBoxDescription.Size = New-Object System.Drawing.Size(360, 250) $richTextBoxDescription.ReadOnly = $true $richTextBoxDescription.BorderStyle = [System.Windows.Forms.BorderStyle]::None $richTextBoxDescription.BackColor = $form1.BackColor $richTextBoxDescription.ScrollBars = [System.Windows.Forms.RichTextBoxScrollBars]::None # Remove slider # Populate description $richTextBoxDescription.SelectionFont = New-Object System.Drawing.Font("Arial", 12, [System.Drawing.FontStyle]::Bold) $richTextBoxDescription.SelectionColor = [System.Drawing.Color]::Green $richTextBoxDescription.AppendText("Welcome to the $AppName`n`n") $richTextBoxDescription.SelectionFont = New-Object System.Drawing.Font("Arial", 10, [System.Drawing.FontStyle]::Regular) $richTextBoxDescription.SelectionColor = [System.Drawing.Color]::Black $Description | ForEach-Object { $richTextBoxDescription.AppendText("$_`n`n") } # Make support link clickable $linkText = "Citrix Support" $startIndex = $richTextBoxDescription.Text.IndexOf($linkText) $richTextBoxDescription.Select($startIndex, $linkText.Length) $richTextBoxDescription.SelectionColor = [System.Drawing.Color]::Blue $richTextBoxDescription.SelectionFont = New-Object System.Drawing.Font($richTextBoxDescription.Font, [System.Drawing.FontStyle]::Underline) $richTextBoxDescription.Select(0, 0) # Add mouse click event for the support link $richTextBoxDescription.Add_MouseClick({ param ($sender, $e) $position = $richTextBoxDescription.GetPositionFromCharIndex($startIndex) $clickableWidth = $richTextBoxDescription.CreateGraphics().MeasureString($linkText, $richTextBoxDescription.SelectionFont).Width $clickableHeight = $richTextBoxDescription.SelectionFont.Height $clickableRectangle = New-Object System.Drawing.Rectangle($position.X, $position.Y, [int]$clickableWidth, [int]$clickableHeight) if ($clickableRectangle.Contains($e.Location)) { [System.Diagnostics.Process]::Start($SupportURL) } }) $form1.Controls.Add($richTextBoxDescription) # Add Next button $buttonNext = New-Object System.Windows.Forms.Button $buttonNext.Text = "Next" $buttonNext.Location = New-Object System.Drawing.Point(450, 310) $buttonNext.Size = New-Object System.Drawing.Size(100, 30) $buttonNext.BackColor = [System.Drawing.Color]::SteelBlue $buttonNext.ForeColor = [System.Drawing.Color]::White $buttonNext.Font = New-Object System.Drawing.Font("Arial", 10, [System.Drawing.FontStyle]::Bold) $buttonNext.Add_Click({ $form1.Hide() Show-MigrationForm $form1.Dispose() }) $form1.Controls.Add($buttonNext) # Add an event handler for the X button (top-right corner) $form1.Add_FormClosing({ param($sender, $e) # Allow the form to close when the X button is clicked $form1.Dispose() # Ensure resources are disposed properly }) # Show the form $form1.ShowDialog() } |