我一直在想,通过单击即可实现锁定/禁用功能区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方集的链接)我正在对“组”的可用属性进行最佳猜测