c# - 如何在 c# 中减少这个 IF-Else 阶梯

标签 c# .net asp.net linq asp.net-controls

这是我创建的 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/

相关文章:

asp.net - IIS Express 自签名证书不受信任

c# - 如何许可使用 C# 开发的应用程序

c# - Excel - 通过 .Net 客户端的 OleDB 引用值

c# - 集成测试 .NET Code 2.2 IHostBuilder (Generic Host Builder)

c# - 我怎样才能得到CPU温度?

c# - 如何从 C# 中的 List<T> 中删除对象并返回删除的对象?

asp.net - 客户端可以决定是否创建 HttpContext 吗?

c# - 如何从 BsonDocument 中正确选择元素的值

.net - 基于组和基于角色的授权之间的 azure 广告差异

复制文件的 C# 代码,这个片段可以改进吗?