2014-02-20 38 views
0

我有一个代码,其中的应用程序崩溃,因为,订阅事件应该被推迟,直到调用加载方法(虽然目前我正在使用复选框检查财产内的另一种方法由于业务规则如下:)如何推迟一个事件“Checkbox.Checked”,直到调用某个方法(加载)

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 method”为止。如何做到这一点,请帮助我。

我的加载方法:

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(); 
    }); 
} 
+0

我认为如果你发布你的加载方法和你的事件处理程序是非常有帮助的,所以我们可以计算出这些方法发生了什么。 – Baldrick

+0

@Baldrick:谢谢,我粘贴了上面的代码。看起来它在事件处理程序中给出异常,并且异常读取“对象引用未设置为对象实例” – Learner

+0

@Baldrick:对不起,在调试时,我发现异常发生在方法“NatureCheck()”呼叫者。 – Learner

回答

1

最简单的方法就是以这条线移动:

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

到Load方法结束。然后处理程序不会连接,直到加载发生。

注意,你也可以随时拆卸处理程序如下:

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

...然后重新再次使用的代码原线!

+0

嗨谢谢Baldrick,不幸的是它不工作:(它引发同样的异常。我的Load方法是:private void Rec_Load(object sender,EventArgs e) if(chkTempRec.Visible = allowTemp) chkTempRec.Enabled =(chkTempRec.Checked = RecDataTable [0] .CA_FLAG); //显示正确的税收领域 串国家= RecDataTable [0] .IsNTY()的String.Empty:RecDataTable? [0] .NTY; showTax(国家); dGSignatureLoaded =(lblDGSignText.Visible = RecDataTable [0] .IsDG_SIGNNull());! } – Learner

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); 

} 
+0

你好谢谢,U不幸的是它不工作:(它引发同样的例外。我的Load方法是:private void Rec_Load(object sender,EventArgs e) if(chkTempRec.Visible = allowTemp) chkTempRec.Enabled =!(chkTempRec.Checked = RecDataTable [0] .CA_FLAG); //显示正确的税务字段 string country = RecDataTable [0] .IsNTY()? string.Empty:RecDataTable [0] .NTY; showTax(country); dGSignatureLoaded =!(lblDGSignText.Visible = RecDataTable [0] .IsDG_SIGNNull()); } – Learner

+0

第一个** if if语句是'if(chkTempRec.Visible == allowTemp)' – Jam86

+0

谢谢果酱,这是一个很好的抓住,但我必须告诉你,我的应用程序运行没有任何问题,即使没有==但只是=。我也试过这个,但是没有运气:(其实它显示的这个说法“”和方法是,自然检查方法的调用者。是否意味着,我应该取消订阅这个事件在呼叫者? – Learner

相关问题