我有一个应用程序崩溃的代码,因为订阅事件应该被推迟,直到调用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();
});
}
答案 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);
}