2014-09-05 17 views
1

我使用WinForms和PowerShell。在我的工具中,我想要一個複選框,當它被選中時,它會在旁邊顯示一條消息,而當未選中時,它將刪除該消息。使用Windows Forms和Powershell協助的CheckedChanged

我已經得到了這麼多(我相信有一個更好的方法來做到這一點)。這會使消息彈出,但當您取消選中該框時,消息不會消失。任何幫助,將不勝感激。謝謝!

$Checkbox_Errors.Add_CheckStateChanged({ ### Checkbox_Errors is the name of the checkbox 
if ($Checkbox_Errors.Checked -eq $true) 
{ 
$ErrorWarning1 = New-Object System.Windows.Forms.Label 
$ErrorWarning1.Text = "WARNING: May take 3-5 Minutes" ### When checked, this is what it should display 
$ErrorWarning1.ForeColor = "Red" 
$ErrorWarning1.AutoSize = $True 
$ErrorWarning1.Location = new-object System.Drawing.Point(170,13) 
$groupbox.Controls.Add($ErrorWarning1) 
} 

}) 


$Checkbox_Errors.Add_CheckStateChanged({ 
if ($Checkbox_Errors.Unchecked -eq $true) 
{ 
$ErrorWarning1 = New-Object System.Windows.Forms.Label 
$ErrorWarning1.Text = "" ### I attempted this, where it would re-write 
$ErrorWarning1.ForeColor = "Red" 
$ErrorWarning1.AutoSize = $True 
$ErrorWarning1.Location = new-object System.Drawing.Point(170,13) 
$groupbox.Controls.Add($ErrorWarning1) 
} 

}) 

回答

3

與其他表單元素一起創建標籤會更簡單。如果您使用的是設計師,則可以將其拖放到其他控件上。然後將標籤的Visible屬性設置爲$ False以隱藏它。

$ErrorWarning1 = New-Object System.Windows.Forms.Label 
$ErrorWarning1.Text = "WARNING: May take 3-5 Minutes" 
$ErrorWarning1.ForeColor = "Red" 
$ErrorWarning1.AutoSize = $True 
$ErrorWarning1.Location = new-object System.Drawing.Point(170,13) 
$ErrorWarning1.Visible = $False # This line hides the label initially 
$groupbox.Controls.Add($ErrorWarning1) 

現在,在你的事件處理程序,而不是生成的標籤,只顯示或隱藏它的基礎上的複選框的狀態:

$ErrorWarning1.Visible = $Checkbox_Errors.Checked 

標籤將始終存在,但它只會當複選框被選中時可見。

+0

感謝您的回覆。這絕對是一種更優雅的處理方式。現在我只需要弄清楚我的「事件處理程序」是什麼。時間去學習。 – Jarom 2014-09-05 20:45:25

+1

沒問題。這裏你的事件處理程序是'Add_CheckStateChanged'。只需用括號中的所有內容替換我答案中的最後一行代碼即可。它應該如下所示:'$ Checkbox_Errors.Add_CheckStateChanged({$ ErrorWarning1.Visible = $ Checkbox_Errors.Checked})'。 – 2014-09-05 20:50:25

+0

我一直在試圖弄清楚這一整天!非常感謝!!! – Jarom 2014-09-05 20:54:48