【问题标题】:How to know the index of radiobutton selected如何知道选中的单选按钮的索引
【发布时间】:2014-08-04 05:43:57
【问题描述】:

如何知道单选按钮的选择索引以知道用户选择了哪个索引选项。

目前我的代码显示读取的项目。但是当我选择出现的项目时,它会显示在文本块中 单选按钮的选定项目(在给定的 3 个选项中,因为我的单选按钮目前有 3 个项目)。

我的尝试是:

foreach (String item in param.Parameter[lop].Component.Attributes.Items)
{
    RadioButton radio = new RadioButton()
    {
        Content = item,
        GroupName = "MyRadioButtonGroup"
    };
    radio.Checked += (o, e) =>
    {
        txtblkShowStatus.Text = item;       
    };
    data= param.Parameter[lop].Label;
    sp.Children.Add(radio);                           
}

现在我想要基于“项目”的选择之类的东西,现在我想要基于索引的选择。 我想要一些类似的东西。如果用户选择第二个按钮(单选按钮),那么我将显示一些 UI 元素。并且这些项目是在反序列化 xml 时获得的。它只处理单选按钮的索引。所以我想要if(selectedIndexofRadioButton ==IndexObtainedFromXmlInIntegr){do something}

有可能吗?如果是,那么我应该如何更改我的代码来实现这一点? 编辑:DonBoitnott 的答案编辑后我的代码更改是:

foreach (String item in param.Parameter[lop].Component.Attributes.Items)
                        {
                            RadioButton radio = new RadioButton()
                            {
                                Content = item,
                                GroupName = "MyRadioButtonGroup",
                                Tag=tg
                            };
                            radio.Checked += (o, e) =>
                            {
                                txtblkShowStatus.Text = item;
                                if (((Int32)((RadioButton)o).Tag).Equals(2))
                                {
                                    MessageBox.Show("hurrey");
                                }
                            };
                            radio.Tag=1;
                            data= param.Parameter[lop].Label;
                            sp.Children.Add(radio);
                            index++; tg++;
                        }

【问题讨论】:

  • 不清楚您的要求。索引什么?组中的单选按钮没有索引。你目前的方法有什么问题?
  • @DonBoitnott 我想要一些类似 .如果用户选择第二个按钮(单选按钮),那么我将显示一些 UI 元素。并且这些项目是在反序列化 xml 时获得的。它只处理单选按钮的索引。所以我想要 if(selectedIndexofRadioButton ==IndexObtainedFromXmlInIntegr){do something}
  • 然后使用Tag 属性将该索引分配给每个RadioButton。如:radio.Tag = 1;。然后您可以使用该标记(强制转换为 int)来测试相等性。
  • @DonBoitnott 我事先不知道我会有多少项目,所以我不能做“radiobutton1.Tag”,radiobutton2.Tag 他们将动态决定。现在如何实现?

标签: c# .net silverlight radio-button silverlight-5.0


【解决方案1】:

您应该利用RadioButton 控制对象的Tag 属性:

foreach (String item in param.Parameter[lop].Component.Attributes.Items)
{
    RadioButton radio = new RadioButton()
    {
        Content = item,
        GroupName = "MyRadioButtonGroup",
        Tag = //integer value from XML
    };
    radio.Checked += (o, e) =>
    {
        txtblkShowStatus.Text = item;       
    };
    data = param.Parameter[lop].Label;
    sp.Children.Add(radio);                           
}

Tag 属性是一个Object,因此您可以为其分配任何内容。您只需在使用时将其投射出来:

if (((Int32)radioButton.Tag).Equals(IndexObtainedFromXmlInInteger)
{
    //do something
}

针对您的评论,OP:

radio.Checked += (o, e) => 
{
    txtblkShowStatus.Text = item; 
    if (((Int32)((RadioButton)o).Tag).Equals(2)) 
    {
        MessageBox.Show("hurrey");
    }
};

您错误地尝试使用上面声明的radio。相反,请使用匿名方法实际接收到的,即oSender

【讨论】:

  • 让我试一试。看看会不会成功
  • 可能你误解了我我试过这个:radio.Checked += (o, e) => { txtblkShowStatus.Text = item; if (((Int32)radio.Tag).Equals(2)) { MessageBox.Show("hurrey"); } };我希望它在选择收音机按钮中的第三个按钮时打印一个消息框..但是没有弹出窗口。
  • 当我将这个“2”更改为“1”时,它会在所有三个按钮点击时弹出消息框(因为它仍然将“1”读作真)
  • 还是一样..Nothing popus
  • 成功了,这是我的错误,我保留了 radio.Tag=1;误会了。
【解决方案2】:

当您的单选按钮组上的索引发生更改时创建一个事件。在此之后创建一个单独的函数来反序列化您的 XML 文件。将从您的 XML 文件中获得的给定整数传递给 index changed 事件,然后相应地显示 UI 元素。请务必比较单选按钮的 .selectedIndex 属性上的整数。

【讨论】:

  • 单选按钮是否有索引更改事件?在银光?
  • telerik.com/help/silverlight/… 看看那个。它应该回答您有关单选按钮属性的问题。
  • 谢谢,但是。我不必使用telerik。你知道如何使用“标签”属性来实现它吗?
  • 您将创建一个类或对象来存储反序列化的 XML 值,然后使用 tag 属性为单选按钮分配该值。类似于:radiobutton1.Tag = new XMLValues() 其中 XMLValues 是您的反序列化整数。标签不是做你想做的事的必要条件,但如果这是你想做的事,那么这就是我会做的事情。
  • 我事先不知道我会有多少项目,所以我不能做“radiobutton1.Tag”,radiobutton2.Tag 他们将动态决定。现在如何实现?
猜你喜欢
  • 2013-01-23
  • 2012-05-01
  • 2014-11-05
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2017-01-03
相关资源
最近更新 更多