我一直在想,通过单击即可实现锁定/禁用功能区UI控件的更好的方法是什么?

目前,我的方法有点简单和基本:

private void tbtnLock_Click(object sender, RibbonControlEventArgs e)
       {
           if (tbtnLock.Checked)
           {
               control1.Enabled = false;
               control2.Enabled = false;
               control3.Enabled = false;
               //...
               //controlN.Enabled = false;
           }
           else
           {
               control1.Enabled = true;
               control2.Enabled = true;
               control3.Enabled = true;
               //...
               //controlN.Enabled = true;
           }
       }


我认为如果只有几个控件是可以的,但是一旦我们在功能区栏上添加了越来越多的控件,我认为做上述事情并不是一个好的编码习惯。

有没有更整洁的方法呢?我可以在功能区栏上收集所有控件吗?希望有人可以在这里给我一些指示?非常感谢。

编辑:

修改后的代码如下:

private void tbtnLock_Click(object sender, RibbonControlEventArgs e)
        {
            toggleUILockState();
        }
private void toggleUILockState()
        {
            if (group1.Items != null)
            {
                foreach (RibbonControl c in group1.Items)
                {
                    if (c.Name != "tbtnLock")
                    {
                        c.Enabled = !tbtnLock.Checked;
                    }
                }
            }
        }


我认为它看起来比以前的版本好很多。谢谢大家的帮助。

最佳答案

可以肯定的是,改进代码的第一步是删除if语句,并直接将tbtnLock控件的选中状态分配给控件的启用状态,例如...

control1.Enabled = !tbtnLock.Checked;
control2.Enabled = !tbtnLock.Checked;


如果立即将代码砍掉,那将削减您的代码。您可能希望首先将其分配给bool,以防稍后要对其进行其他处理(例如,某些其他对象可以帮助确定锁定状态)

bool isEnabled = !tbtnLock.Checked;

control1.Enabled = isEnabled;
control2.Enabled = isEnabled;


除此之外,我还需要知道您正在使用什么“功能区”控件。你有链接吗?

但是正如您所暗示的那样,我想看看如何尝试找到一组控件,循环遍历它们,检查该控件是否不是tbtnLock控件,并根据需要禁用/启用。

另外,我建议将所有这些代码移到事件句柄之外的函数中,以防您需要从其他代码中调用此方法。就像是...

private void tbtnLock_Click(object sender, RibbonControlEventArgs e)
{
   UpdateRibbonState();
}

private void UpdateRibbonState(){
   //Code goes here
}


编辑:假设“组”(如注释中所述)具有控件的集合...

foreach(Control c in group.Controls)
{
   if(c.Name != "tbtnLock")
   {
      c.Enabled = !tbtnLock.Checked;
   }
}


我不熟悉任何内置的.Net功能区控件,并且由于没有指向第3方集的链接)我正在对“组”的可用属性进行最佳猜测

09-11 18:33
查看更多