The goal is to change text of System.Windows.Forms.Label
after pressing System.Windows.Forms.Button
. I have following OOP code. Which (almost) works:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
class MyForm : System.Windows.Forms.Form {
MyForm($mystuff) {
#Do-Stuff
$this.Add_Load( $this.MyForm_Load )
}
$MyForm_Load = {
$mlabel = [System.Windows.Forms.Label]::new()
$mlabel.Name = "status"
$mlabel.Text = "enabled"
$mbutton = [System.Windows.Forms.Button]::new()
$mbutton.Text = "toggle state"
$mbutton.Location = [System.Drawing.Point]::new(100,100)
$mbutton.Add_Click( $this.mbutton_click )
$this.Controls.Add($mlabel)
$this.Controls.Add($mbutton)
}
$mbutton_click = {
if ($this.Parent.Controls["status"].Text -eq "enabled"){
$this.Parent.Controls["status"].Text = "disabled"
}
else{
$this.Parent.Controls["status"].Text = "enabled"
}
}
}
$foo = [MyForm]::new("test")
$foo.ShowDialog()
Now I'm trying to rewrite it to procedural style which is not working:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$global:mbutton = [System.Windows.Forms.Button]::new()
$mbutton.Text = "toggle state"
$mbutton.Location = [System.Drawing.Point]::new(100,100)
# $mbutton.Add_Click( {Button_Click} ) # pressing button shows errors on console
$global:mlabel = [System.Windows.Forms.Label]::new()
$mlabel.Name = "status"
$mlabel.Text = "enabled"
$global:Form = New-Object System.Windows.Forms.Form
$Form.Controls.Add($mlabel)
$Form.Controls.Add($mbutton)
$Form.ShowDialog() | Out-Null
$mbutton.Add_Click( {Button_Click} ) # pressing button does nothing
Function Button_Click() {
if ($Form.Parent.Controls["status"].Text -eq "enabled"){
$Form.Parent.Controls["status"].Text = "disabled"
}
else{
$Form.Parent.Controls["status"].Text = "enabled"
}
}
What I did wrong? How can I debug such issue?