【问题标题】:Detecting which radio button of many was checked using C# & XAML检测使用 C# 和 XAML 检查了许多单选按钮
【发布时间】:2015-09-15 03:59:30
【问题描述】:

在 Android/Java 中有一个 RadioGroup 对象,它可以包含许多 RadioButtonsRadioGroup 也有一个 OnChanged 事件,我可以收听它,然后询问它现在选择了哪个 RadioButton(然后获取选定的单选按钮 ID)。

在 C# 中是否有相应的方法来实现相同的事情?看来我需要为每个RadioButton 响应Checked 事件(尽管它们可以转到同一个事件处理程序),但是在事件处理程序中我需要遍历每个RadioButton 以查看它是否被检查?如果我有很多(例如 20 个)RadioButton,这将是很多代码。有没有更简单的方法?

【问题讨论】:

  • 首先,您提到了RadioGroupRadioButton,但后来您询问了CheckBox。您能否更新您的问题以准确说明您对哪个控件感兴趣?
  • @LightBulb 哎呀,是的,已更正。我的意思是 RadioButton 不是复选框
  • 基本上,一个组中只有 1 个RadioButton 可以检查(组由GroupName 属性表示或将所有RadioButtons 放在像StackPanel 这样的容器中。回答@keyboardP 提供的可能是识别哪个被检查并采取相应措施的最简单方法。在这种情况下,IMO 使用 Tag 属性是最简单的。

标签: c# xaml windows-phone-8.1 radio-button


【解决方案1】:

通常在 Windows 事件处理程序中有一个 sender 参数,可以将其转换为引发事件的适当控件类型...例如。

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBox chk = (CheckBox)sender;
}

现在您可以明确知道在选中事件发生时选中了哪个 CheckBox。

因此,在您的情况下,您会将相同的事件处理程序连接到所有 CheckBox,然后使用 chk 变量标识新检查的 CheckBox。

【讨论】:

    【解决方案2】:

    您可以分配一个属性来标识控件,例如Tag 属性或Name 属性。然后,您尝试将事件处理程序中的 sender 强制转换为 CheckBox 类型并检索标识属性。

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox cb = sender as CheckBox;
    
        if(cb != null)
        {
            string cbName = cb.Name; 
        }
    }
    

    通过使用as 而不是显式转换 ((CheckBox)sender),您可以避免在转换无效时引发异常。在这种情况下,如果只为 CheckBox 分配了此事件处理程序,则这种情况不太可能发生,但在其他情况下这是一种很好的做法,除非您出于任何原因需要抛出异常。

    【讨论】:

    • 选择作为答案,特别提到使用标签/名称来识别选中了哪个 RadioButton。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2020-04-10
    • 2015-05-28
    • 2019-05-29
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多