使用 C# 和 XAML 检测选中了多个单选按钮
Detecting which radio button of many was checked using C# & XAML
在Android/Java中有一个RadioGroup
对象可以包含很多RadioButtons
。 RadioGroup
也有一个 OnChanged
事件,我可以收听它,然后询问它现在选择了哪个 RadioButton
(然后获取所选的单选按钮 ID)。
在C#中是否有相应的方法来实现同样的事情?看来我需要为每个 RadioButton
响应 Checked
事件(尽管它们可以转到同一个事件处理程序),但是在事件处理程序中我需要遍历每个 RadioButton
看看它是否被检查过?如果我有很多(例如 20)RadioButton
,这就是很多代码。有没有更简单的方法?
通常在 windows 事件处理程序中有一个 sender 参数,可以将其转换为引发事件的适当控件类型...例如
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
}
现在您清楚地知道在选中事件发生时选中了哪个复选框。
因此在您的情况下,您会将同一个事件处理程序挂接到所有复选框,然后使用 chk
变量标识新选中的复选框。
您可以分配一个 属性 来标识控件,例如 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 分配给此事件处理程序,则这种情况不太可能发生,但在其他情况下这是一种很好的做法,除非您出于任何原因需要抛出异常。
在Android/Java中有一个RadioGroup
对象可以包含很多RadioButtons
。 RadioGroup
也有一个 OnChanged
事件,我可以收听它,然后询问它现在选择了哪个 RadioButton
(然后获取所选的单选按钮 ID)。
在C#中是否有相应的方法来实现同样的事情?看来我需要为每个 RadioButton
响应 Checked
事件(尽管它们可以转到同一个事件处理程序),但是在事件处理程序中我需要遍历每个 RadioButton
看看它是否被检查过?如果我有很多(例如 20)RadioButton
,这就是很多代码。有没有更简单的方法?
通常在 windows 事件处理程序中有一个 sender 参数,可以将其转换为引发事件的适当控件类型...例如
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
}
现在您清楚地知道在选中事件发生时选中了哪个复选框。
因此在您的情况下,您会将同一个事件处理程序挂接到所有复选框,然后使用 chk
变量标识新选中的复选框。
您可以分配一个 属性 来标识控件,例如 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 分配给此事件处理程序,则这种情况不太可能发生,但在其他情况下这是一种很好的做法,除非您出于任何原因需要抛出异常。