我有一个MDI form
,其中一些子窗体需要在关闭之前显示一个消息框,而其他人可以在不询问的情况下关闭。由于儿童表格的close event
致电application.Exit()
时出现问题,我会处理父母的close event
,并检查它是在哪里被解雇的。如果它是在需要消息框的表单中被触发的,我会调用它,否则只需关闭应用程序。所有这一切都是在这个代码实现:C#将long if语句转换为更合适的东西
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
SEdit se = this.ActiveMdiChild as SEdit;
SoEdit soleEdit = this.ActiveControl as SoEdit;
UppEdit ue = this.ActiveControl as UpEdit;
MEdit mat = this.ActiveControl as MEdit;
LEdit lse = this.ActiveControl as LEdit;
CEdit cle = this.ActiveControl as CEdit;
if (se != null || soleEdit != null || ue != null || mat != null || lse != null || cle != null)
{
if (MessageBox.Show("Do you want to save before exit?", "Closing",
MessageBoxButtons.YesNo,
MessageBoxIcon.Information) == DialogResult.Yes)
{
MessageBox.Show("To Do saved.", "Status",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}
我还在学习,但我知道,这么长的if语句是错误的代码的迹象,但我不知道如何改进它。处理这种情况的正确方法是什么?
使用CAST只核对空。使用is运算符 - 为您节省六行代码。 –
@DasKrümelmonster我不明白你在说什么。你怎么能在这里使用'is'运算符? – Khan
@JefferyKhan因为Leron实际上并没有对铸造结果做任何事情,通过使用'is'它只是返回true/false和IMO,更具可读性:'if(ActiveMdiChild是SEdit‖ActiveControl是SEdit‖ActiveControl是SoEdit || ...)'(检查可以/应该仍然移动到本地布尔值或最好是一个很好的命名方法,如下所示,但即使在那些我建议使用'is'仍然) –