这是我创建的IF -Else梯形图,用于将第一个可见控件聚焦在表单上。根据要求,任何控件都可以隐藏在表单上,​​因此我必须找到第一个可见控件并将其聚焦。

 if (ddlTranscriptionMethod.Visible)
    {
        ddlTranscriptionMethod.Focus();
    }
    else if (ddlSpeechRecognition.Visible)
    {
        ddlSpeechRecognition.Focus();
    }
    else if (!SliderControl1.SliderDisable)
    {
        SliderControl1.Focus();
    }
    else if (ddlESignature.Visible)
    {
        ddlESignature.Focus();
    }
    else
    {
        if (tblDistributionMethods.Visible)
        {
            if (chkViaFax.Visible)
            {
                chkViaFax.Focus();
            }
            else if (chkViaInterface.Visible)
            {
                chkViaInterface.Focus();
            }
            else if (chkViaPrint.Visible)
            {
                chkViaPrint.Focus();
            }
            else
            {
                chkViaSelfService.Focus();
            }
        }
    }

还有其他方法可以做到这一点。我以为使用LINQ会降低性能,因为我必须遍历整个页面集合。我在有母版页的页面上很深。请提出建议。

最佳答案

我觉得你的树好。这肯定看起来像是可以简化的逻辑树,并且您对此有很好的嗅觉。但是,似乎逻辑树反射(reflect)了您的需求。 逻辑实际上就是这个复杂的,这是C#提供给您处理这种情况的条件框架。我认为这是无法改善的。

如果,您有一个应该具有焦点的简单控件列表,并且想将焦点放在列表中的第一个可见控件上,则可以执行以下操作:

(From c in ListOfControls
Where c.visible = true
Select c).First.Focus();

但是,看来您还有一些其他条件,所以这行不通。

关于c# - 如何在C#中减少此IF-Else阶梯,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2600345/

10-11 22:50
查看更多