繁体   English   中英

在.net中获取选中的单选按钮列表

[英]Getting list of checked radiobuttons in .net

TLDR; 寻找一种类似这样的方法来检索所有单选按钮...(psudo)

    List<RadioButton> btn = new List<RadioButton>;
    btn = stackPanel.getAllRadioButtons()

我目前正在用C#构建一个小测验应用程序。 我具有将所需的GUI元素添加到组框的功能。 我想知道是否有任何方法可以遍历创建的元素(例如单选按钮)以查看已检查的元素。

这是功能之一,以及如何将其添加到窗口。

    private void tfQ(string questionBody)
    {
        StackPanel questionPanel = new StackPanel{Orientation = Orientation.Vertical};
        questionPanel.Children.Add(new Label { Content = questionBody });
        GroupBox group = new GroupBox();
        RadioButton trueRadio = new RadioButton();
        trueRadio.Content = "True";
        RadioButton falseRadio = new RadioButton();
        falseRadio.Content = "False";
        questionPanel.Children.Add(trueRadio);
        questionPanel.Children.Add(falseRadio);
        group.Content = questionPanel;
        mainStack.Children.Add(group);


    }

构造函数:

    public quiz()
    {
        tfQ("This is a true/false question");
        Window w = new Window();
        w.Content = mainStack;
        w.Show();
    }

我发现了许多以C#脚本格式执行此操作的方法

(使用控制功能...)

     var checkedButton = container.Controls.OfType<RadioButton>()
                                  .FirstOrDefault(r => r.Checked);

但是我还没有找到一种“程序化”的方法。 我已经考虑过将void tfQ的类型更改为StackPanel,但这只能帮助我更轻松地遍历堆栈面板,尽管这只能部分解决我的问题-可以让我更轻松地遍历StackPanel,但是我仍然不知道如何在面板上获取RadioButtons。

PS我是C#的新手-具有Java / C / C ++ / Python的经验

我利用以下代码将内容分别投射到新的groupbox和stackpanel中。

    if (child is GroupBox)
    {
       if ((child as GroupBox).Content is StackPanel)
       {
           StackPanel d = (StackPanel)((GroupBox)child).Content; 
       }

     }

这使我可以将内容转换为控件的本地副本。 可能不是最好的方法-老实说,我敢肯定这是非常低效的。 解决了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM