如何推迟事件“Checkbox.Checked”直到调用某个方法(Load)

时间:2014-02-20 03:58:39

标签: c# .net winforms event-handling

我有一个应用程序崩溃的代码,因为订阅事件应该被推迟,直到调用load方法(当前我在另一个方法中使用复选框check属性,因为业务规则如下:)

private void NatureCheck(bool Rec)
{
    chkRec.Checked = !(lblRecID.Visible = txtRecID.Visible = Rec);
        if (!applyReadOnly)
            recipientController.SaveOrNotInBook(chkRec.Checked, address);
}

以下事件已触发且应用崩溃。

chkRec.CheckedChanged += new System.EventHandler(chkRec_CheckedChanged);

我想推迟触发上述事件,直到调用“Load方法”。怎么做,请帮帮我。

我的加载方法:

private void Rec_Load(object sender, EventArgs e) 
{ 
    if (chkRec.Visible = allowTemp)
        chkRec.Enabled = !(chkRec.Checked = RecDataTable[0].CA_FLAG);  
    string country = RecDataTable[0].IsNTY() ? string.Empty : RecDataTable[0].NTY; 
    showTax(country); 
    dGSignatureLoaded = !(lblDGSignText.Visible = RecDataTable[0].IsDG_SIGNNull()); 
}

事件处理程序:

private void chkRec_CheckedChanged(object sender, EventArgs e)
{
    Controller.TryHandleException(delegate
    {

        lblRec.Visible = txtRecID.Visible = !chkRec.Checked;
        if (recipientController.SaveOrNotInBook(chkRec.Checked, RecipientDataTable[0]))
            recDataTableBindingSource.EndEdit();
    });
}

2 个答案:

答案 0 :(得分:1)

最简单的选择就是移动这一行:

 chkRec.CheckedChanged += new System.EventHandler(chkRec_CheckedChanged);

进入Load方法的末尾。然后在Load发生之前不会连接处理程序。

另请注意,您可以随时分离处理程序,如下所示:

chkRec.CheckedChanged -= new System.EventHandler(chkRec_CheckedChanged);

...然后使用原始代码行再次重新连接!

答案 1 :(得分:1)

初始化表单时是否存在事件处理程序? 如何在代码之前删除处理程序?

private void NatureCheck
{
    chkRec.CheckedChanged -= new System.EventHandler(chkRec_CheckedChanged);
    chkRec.Checked = !(lblRecID.Visible = txtRecID.Visible = Recip);
    chkRec.CheckedChanged += new System.EventHandler(chkRec_CheckedChanged);

}