【发布时间】:2020-02-29 04:30:30
【问题描述】:
我创建了一个自定义 button control,并希望它在组中表现得像 RadioButtons。该按钮将被放置在同一个container 或panel 上的同一类型的组或集合中(按钮拖放到容器上)。当我单击这些按钮中的任何一个时,我需要发生以下情况:
将点击按钮的
BackColor更改为预定义颜色:Color.Cycan;将点击按钮的选中状态从
false设置为true确保同一面板/容器上所有其他相同类型的按钮都设置为其默认设置,即:
BackColor = Color.Gray;checked = false;
我尝试了以下code,但我得到了这个结果:
点击按钮的
BackColor成功更改为Color.Cycan;同一容器上所有其他同类型按钮的默认
BackColor已成功设置为默认:Color.Gray;但是点击按钮的
checked state并没有变成true.,它仍然是false.
我已附上我尝试过的代码,如下:
可能是什么问题或我在哪里漏掉了重点?
这是一个Winform / Windows Forms 按钮控件,我正在C#. 中编程
我不想为此使用单选按钮,因为我已经自定义设计了MyButton。
谢谢。
这是我尝试过的代码:
// 调用 'ClickedButton();'点击事件。
private bool checked = false;
private void ClickedButton()
{
do(
BackColor = Color.Cycan;
checked = true;
if(Parent == null)
break;
foreach(MyButton button in Parent.Controls.OfType<MyButton>())
{
if(button == this) { continue }
else{
BackColor = Color.Gray;
checked = false;
}
}
)
while(false)
}
【问题讨论】:
-
检查变量在哪里定义?
-
与函数在同一个类中定义。我已经编辑了代码以反映这一点。我的代码格式错误,因此 StackOverflow 无法显示该变量。我已经对其进行了编辑以反映变量。
-
见代码here。它使用
Action()s 定义了一些相互关联的控件的行为。 -
do...while在这里的作用是什么?没有意义。 foreach...next 就足够了,可以完成这项工作。删除do..while块并尝试一下。 -
@JQSOFT:删除
do..while循环并不能解决问题。我希望将单击按钮的选中状态设置为true,并将所有其他按钮的选中状态设置为false。确保在您的回复中包含经过测试的代码,我可能在这里遗漏了一些东西。我求助于使用do while loop来尝试更改按钮的boolean状态。
标签: c# winforms button boolean do-while