gpt4 book ai didi

c# - 在单击 RadioButton 之前保持按钮不可见 c#

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:02 24 4
gpt4 key购买 nike

我试图强制用户在允许下一步移动之前选择一个 rabiobutton。我使“下一步”按钮不可见,但我有 10 个单选按钮,如果选中其中任何一个,则必须对其进行验证。根据定义,只能选中 1 个单选按钮。我的代码看起来像这样:

b1.Text = "Next";
b1.Parent = fpn1;
fpn1.Controls.Add(b1);
b1.Dock = DockStyle.Bottom;
b1.BackColor = Color.LightGray;
b1.Visible = false;
RadioButton rb;
while (b1.Visible == false)
{
MessageBox.Show("LOOOL");
//Thread.Sleep(5000);
rb = fpn1.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked);
if (rb != null)
{
b1.Visible = true;
}
}

所以当我的单选按钮都没有被点击时,b1 是不可见的。问题是......这进入了无限循环。用户甚至无法再选择任何按钮,因为页面无法加载。有绕过的想法吗?

我还能做些什么来获得想要的结果?

最佳答案

无限循环非常擅长阻止应用程序执行任何操作。从本质上讲,您是在倒退地考虑它。你在想:

Keep making the button invisible until something happens.

为什么?一旦您使按钮不可见,它将保持不可见,直到您更改它。所以,相反,可以这样想:

Make the button visible when something happens.

在这种情况下,“发生某事”是指用户更改了单选按钮的值。所以你想要一个事件的处理程序:

private void radioButton_CheckedChanged(Object sender, EventArgs e)
{
// your logic here
}

您可以使用表单设计器将此函数分配给各种单选按钮的所有 CheckedChanged 事件,因此它们都使用相同的处理程序。

那么“你的逻辑”是什么?好吧,真的,这取决于你。 听起来您想等到几个不同的单选按钮组被选中?因此,您将基于此构建一些条件。在高层次上,这在语义上看起来像这样:

if (allRadioButtonsSelected())
b1.Visible = true;

如果您的代码行符合您的要求:

rb = fpn1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked)

然后你甚至可以使用它:

if (fpn1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked) != null)
b1.Visible = true;

尽管它并不完全听起来像您要查找的内容,因为它会告诉您是否只有一个 单选按钮被选中。但我可能误解了你的意思,所以这取决于你。


要点是,不要在检查是否发生某些事情时一直循环和阻塞线程。因为当你阻塞线程时,它永远不会发生。相反,使用事件处理程序在事件发生时对其做出响应。

关于c# - 在单击 RadioButton 之前保持按钮不可见 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516983/

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