我可以禁用我按下的按钮旁边的按钮吗?
c#
我想一键禁用 2 个按钮,而不指定这些按钮。我的表单上有大约 150 个按钮,我不想为所有这些按钮编写一个函数。
我有一个类似这样的功能,可以禁用我点击的按钮。
public void disableButton(object sender, EventArgs e)
{
if (((Button)sender).Enabled == true)
{
((Button)sender).Enabled = false;
((Button)sender).BackColor = Color.Red;
}
}
所以基本上,当我调用这个函数时,我想禁用这个按钮,以及它旁边的一个按钮。(例如按钮 1 和按钮 2)
回答
考虑到按钮应该以特定的顺序添加到控件中,这样当您根据需要获得所有按钮时,您可以禁用当前按钮的下一个按钮,请参考以下代码:
public void disableButton(object sender, EventArgs e)
{
var selectedButton = ((Button)sender);
var allButtons = Controls.OfType<Button>().ToList();
var currentButtonIndex = allButtons.Select((s, i) => new { button = s, index = i }).Single(si => si.button.Name == selectedButton.Name).index;
if (allButtons[currentButtonIndex + 1].Enabled == true)
{
allButtons[currentButtonIndex + 1].Enabled = false;
allButtons[currentButtonIndex + 1].BackColor = Color.Red;
}
}
要获取表单中所有按钮的列表Controls.OfType<Button>().ToList(),下一步是获取当前按钮的索引。获得索引后,将其增加 1,您将获得下一个按钮的引用,
以便更安全地实现,只需检查它是否不是最后一个按钮,在这种情况下选择第一个按钮,请参阅以下代码:
currentButtonIndex = currentButtonIndex + 1 >= allButtons.Count() ? 0 : currentButtonIndex;
假设你无法弄清楚按钮的顺序,但下一个按钮应该基于TabStop,基于TabStop你可以更好地找到下一个按钮,参考下面的代码
var allButtons = Controls.OfType<Button>().OrderBy(o => o.TabStop).ToList();
var currentButtonIndex = allButtons.Select((s, i) => new { button = s, index = i }).Single(si => si.button.Name == selectedButton.Name).index;
var toDisableButton = allButtons[currentButtonIndex + 1];
Controls.OfType<Button>().Single(si => si.Name == toDisableButton.Name).Enabled = false;