I created a GUI with a richtext output box. I want to output text to the output box in different colors, so I used the SelectionColor property to change the color. I also wanted to test to see if it could be changed within a function. When I tried, I noticed that color changes for all of the text when I click on the Start button. I ran the debugger in PowershellISE and found out that the colors ARE changing, but after the function named TEST ends, that’s when the very first color that is set in the function sets all of the text to that color. Does anyone know why? Changing colors outside of function works correctly.
function Load-Form { Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $form = New-Object System.Windows.Forms.Form $form.Text = "Data Entry Form" $form.Size = New-Object System.Drawing.Size(400,300) $form.StartPosition = "CenterScreen" $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Point(75,120) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = "OK" $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.AcceptButton = $OKButton $form.Controls.Add($OKButton) $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Point(150,120) $CancelButton.Size = New-Object System.Drawing.Size(75,23) $CancelButton.Text = "Cancel" $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel $form.CancelButton = $CancelButton $form.Controls.Add($CancelButton) $StartButton = New-Object System.Windows.Forms.Button $StartButton.Location = New-Object System.Drawing.Point(75,90) $StartButton.Size = New-Object System.Drawing.Size(75,23) $StartButton.Text = "Start" $StartButton.DialogResult = [System.Windows.Forms.DialogResult]::None $StartButton.Add_Click({ Test $OUTPUT_RICHTEXT.Text+="Get out" }) $form.Controls.Add($StartButton) $SCRIPT:OUTPUT_RICHTEXT=New-Object System.Windows.Forms.RichTextBox $OUTPUT_RICHTEXT.Location=New-Object System.Drawing.Size(10,150) $OUTPUT_RICHTEXT.Size=New-Object System.Drawing.Size(300,100) $OUTPUT_RICHTEXT.Multiline=$True $OUTPUT_RICHTEXT.ReadOnly = $True $OUTPUT_RICHTEXT.BackColor = [Drawing.Color]::White $OUTPUT_RICHTEXT.ScrollBars = "Vertical" $form.Controls.Add($OUTPUT_RICHTEXT) $label = New-Object System.Windows.Forms.Label $label.Location = New-Object System.Drawing.Point(10,20) $label.Size = New-Object System.Drawing.Size(280,20) $label.Text = "Please enter the information in the space below:" $form.Controls.Add($label) $textBox = New-Object System.Windows.Forms.TextBox $textBox.Location = New-Object System.Drawing.Point(10,40) $textBox.Size = New-Object System.Drawing.Size(260,20) $form.Controls.Add($textBox) $form.Topmost = $True $form.Add_Shown({$textBox.Select()}) $result = $form.ShowDialog() if ($result -eq [System.Windows.Forms.DialogResult]::OK) { $x = $textBox.Text $x } } function Test { $script:OUTPUT_RICHTEXT.SelectionColor = 'Magenta' $script:OUTPUT_RICHTEXT.AppendText("This text will be Magenta. `n") $script:OUTPUT_RICHTEXT.SelectionColor = 'Green' $script:OUTPUT_RICHTEXT.AppendText("This text will be Green. `n") $script:OUTPUT_RICHTEXT.SelectionColor = 'Blue' $script:OUTPUT_RICHTEXT.AppendText("This text will be Blue. `n") } Load-Form