Powershell/.net CheckedChanged事件处理

Powershell/.net CheckedChanged事件处理,.net,powershell,.net,Powershell,我正在搜索添加复选框checkedchanged事件的方法。 我想要的是,如果选中我的CB_顾问(CB=Checkbox),它将启用CB_结束日期和TB_公司(Textbox) 我不知道如何处理这种情况,即使是在现场点击 这是我的代码谢谢你的帮助 function GenerateForm { [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null [reflection.assembly]::l

我正在搜索添加复选框checkedchanged事件的方法。 我想要的是,如果选中我的CB_顾问(CB=Checkbox),它将启用CB_结束日期和TB_公司(Textbox) 我不知道如何处理这种情况,即使是在现场点击

这是我的代码谢谢你的帮助

function GenerateForm {
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null



$Form_UC_Main = New-Object System.Windows.Forms.Form
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Point = New-Object System.Drawing.Point
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
    $Form_UC_Main.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form User Creation Main Windows Code
$Form_UC_Main.Text = "User Creation software"
$Form_UC_Main.Name = "form1"
$Form_UC_Main.DataBindings.DefaultDataSourceUpdateMode = 0
$Form_UC_Main.size = new-object System.Drawing.Size(300,250)

#End of Main form windows code


#initialize the Checkboxe, if check should activate CB_EndDate and TB_Company
$CB_Consultant = New-Object System.Windows.Forms.CheckBox
$CB_Consultant.location =  new-object System.Drawing.Size (124,130)
$CB_Consultant.Size =  new-object System.Drawing.Size(15,14)
$CB_Consultant.UseVisualStyleBackColor = $True
$CB_Consultant.TabIndex = 0
$CB_Consultant.checkAlign = "MiddleRight"
#$CB_Consultant.Text = "Site groups change"
$CB_Consultant.DataBindings.DefaultDataSourceUpdateMode = 0
$CB_Consultant.Name = "Consultant"
$CB_Consultant.CheckState

$Form_UC_Main.Controls.Add($CB_Consultant)



$CBL_AccType = new-object System.Windows.Forms.Label
$CBL_AccType.Location = new-object System.Drawing.Size(20,130)
$CBL_AccType.size = new-object System.Drawing.Size(120,20)
$CBL_AccType.Text = "Enable if Checked :"

$Form_UC_Main.Controls.Add($CBL_AccType)

#This checkbox is disable by default, should be enable by checking CB_Consultant
$CB_EndDate = New-Object System.Windows.Forms.CheckBox
$CB_EndDate.location =  new-object System.Drawing.Size(125,150)
$CB_EndDate.Size =  new-object System.Drawing.Size(20,20)
$CB_EndDate.UseVisualStyleBackColor = $True
$CB_EndDate.TabIndex = 0
$CB_EndDate.enabled = $false
#$CB_EndDate.Text = "Site groups change"
$CB_EndDate.DataBindings.DefaultDataSourceUpdateMode = 0
$CB_EndDate.Name = "EndDateActivation"

$Form_UC_Main.Controls.Add($CB_EndDate)


$TBL_EndDate2 = new-object System.Windows.Forms.Label
$TBL_EndDate2.Location =  new-object System.Drawing.Size(50,154)
$TBL_EndDate2.Size =   new-object System.Drawing.Size(60,20)
$TBL_EndDate2.Text = "End Date:"

$Form_UC_Main.Controls.Add($TBL_EndDate2)

#This TextBox is disable by default, should be enable by checking CB_Consultant
$TB_Company = new-object System.Windows.Forms.Textbox
$TB_Company.Location =  new-object System.Drawing.Size(125,170) #was 125,130
$TB_Company.Size =   new-object System.Drawing.Size(150,27)
$TB_Company.DataBindings.DefaultDataSourceUpdateMode = 0
$TB_Company.enabled = $false
$TB_Company.Name = "Company Name"

$Form_UC_Main.Controls.Add($TB_Company)


$TBL_Company = new-object System.Windows.Forms.Label
$TBL_Company.Location =  new-object System.Drawing.Size(50,175) #was 50,122
$TBL_Company.Size =   new-object System.Drawing.Size(60,35)
$TBL_Company.Text = "Company:"

$Form_UC_Main.Controls.Add($TBL_Company)


#Save the initial state of the form
$InitialFormWindowState = $Form_UC_Main.WindowState
#Init the OnLoad event to correct the initial state of the form
$Form_UC_Main.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$Form_UC_Main.ShowDialog()| Out-Null
} #end of function
GenerateForm

也许Windows窗体不是在powershell中实现这一点的最佳方式。你看到这个了吗


或者使用WPF实际创建富客户端应用程序,而不是在powershell中编写脚本

很容易找到,但我花了很多时间才找到这个过程。这就是我所做的

我接了这个电话

$CB_Consultant.CheckState
并将其替换为以下代码:

$CB_Consultant.Add_CheckStateChanged({
    $TB_Company.enabled = $CB_Consultant.Checked
    $CB_EndDate.enabled = $CB_Consultant.Checked
    #and so on
})

结果是一个带有两个灰色字段的复选框,当您单击该复选框时,另两个字段将变为活动状态。

如果您使用的是System.Windows.Forms复选框,则此方法有效,但如果您使用的是System.Windows.Controls复选框,则不起作用,如果您使用XAML制作GUI,则会出现这种情况

对于XAML,您需要添加单独的状态,如下面的示例所示。在本例中,我们有一个名为tabcheckBox的复选框和一个名为TabVMBtnDeleteVM的按钮。选中该框后,该按钮将被禁用。取消选中该框时,按钮将启用

$tabcheckBox.Add_Checked({$TabVMbtnDeleteVM.IsEnabled = $false})
$tabcheckBox.Add_Unchecked({$TabVMbtnDeleteVM.IsEnabled = $true})

当然,我知道这不是更好的方式,但到目前为止,我可以做我想做的。我将查看此cmdlet。您好。你的回答今天对我帮助很大,但我想知道我在为自己解决这个问题时遗漏了什么。我经历了很多次,但从未在任何方法或事件之前看到“添加”。我是一个自学成才的编剧,所以这对你来说可能是显而易见的知识,但我很想更好地理解这一点。这与事件处理有关吗?
           #Add below code after the checkBox code which you are created.
           $CB_Consultant.Add_CheckStateChanged({
             if($CB_Consultant.checked){
              $CB_EndDate.enabled = $CB_Consultant.checked
              $TB_Company.enabled = $CB_Consultant.checked
             }
            else{
             $CB_EndDate.enabled = $CB_Consultant.checked
             $TB_Company.enabled = $CB_Consultant.checked
           }  
           })