gpt4 book ai didi

c# - 以编程方式锁定/禁用功能区栏上的多个 UI 控件的更好方法

转载 作者:行者123 更新时间:2023-11-30 15:42:00 25 4
gpt4 key购买 nike

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

关于c# - 以编程方式锁定/禁用功能区栏上的多个 UI 控件的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com