关于VB.NET中,如何得知多个radiobutton中哪个被选中(checked)

来源:互联网 发布:java开发人员培训机构 编辑:程序博客网 时间:2024/04/27 16:53

2016年6月15日14:26:27———-
这类问题,遇见过不少次,不仅限于radiobutton,还可能有其他MFC组件的判断。
原先我的做法是一大串if……elseif ……elseif……elseif……end if 不但麻烦,而且在添加新radiobutton(或者删除、升级)后,容易忘记添加分支语句,导致bug。
现以radiobutton为例,给出个比较简洁的方法。
以下是VB.NET语句。

  Dim checkedb As RadioButton        checkedb = GroupBox1.Controls.OfType(Of RadioButton)().FirstOrDefault(Function(r) r.Checked = True)        Debug.Print(checkedb.Name)
GroupBox1是这一堆radiobutton的容器,如果没有,用Form也行。然后ofTyple(Of radiobutton)是筛选出容器中指定控件,过滤掉其他控件,我们这当然是radiobutton了。然后FirstOrDefault是返回符合符合条件的第一个控件或者默认值。这是个LINQ查询语句。关于LINQ,附录1有其他的LINQ查询操作符,附录2有许多我查阅资料时参考的网址。最后查询操作符括号中是个委托函数(类似函数指针),如果是简单的判断,可以直接使用匿名函数;比如我们这,判断条件仅仅是 if (某个按钮.checked )  所以就使用了简单的匿名函数,如果有更为复杂的判断,则使用以下语句即可
 Dim func1 As Func(Of RadioButton, Boolean) = Function(ByVal i As RadioButton) ……判断过程……End Functioncheckedb = GroupBox1.Controls.OfType(Of RadioButton)().FirstOrDefault(func1)

———————————–分割线———————————————————–
还有另外一种方法,参考http://stackoverflow.com/questions/11160594/event-handler-for-groupbox-with-radiobuttons-in-c-sharp#new-answer

附录1:
引用自:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2126625.html

·First - 返回集合中的第一个元素;不延迟
·FirstOrDefault - 返回集合中的第一个元素(如果没有则返回默认值);不延迟
·Last - 返回集合中的最后一个元素;不延迟
·LastOrDefault - 返回集合中的最后一个元素(如果没有则返回默认值)
·ElementAt - 返回集合中指定索引的元素;不延迟
·ElementAtOrDefault - 返回集合中指定索引的元素(如果没有则返回默认值);不延迟
·Contains - 判断集合中是否包含有某一元素;不延迟
·Any - 判断集合中是否有元素满足某一条件;不延迟
·All - 判断集合中是否所有元素都满足某一条件;不延迟
·Count - 返回集合中的元素个数,返回int;不延迟
·LongCount - 返回集合中的元素个数,返回long;不延迟
·Sum - 集合应为数字类型集合,求其和;不延迟
·Min - 返回集合的最小值;不延迟
·Max - 返回集合的最大值;不延迟
·Average - 集合应为数字类型集合,求其平均值;不延迟
·Aggregate - 根据输入的表达式获取一个聚合值;不延迟
·Cast - 将集合转换为强类型集合;延迟
·DefaultIfEmpty - 查询结果为空则返回默认值;延迟
·SequenceEqual - 判断两个集合是否相同;不延迟
·OfType - 过滤集合中的指定类型;延迟
·ToArray - 将集合转换为数组;不延迟
·ToList - 将集合转换为List集合;不延迟
·ToDictionary - 将集合转换为{K, V}集合;不延迟

附录2:
MSDN:
Lambda 表达式(C# 编程指南)
Enumerable.OfType(Of TResult) 方法
Lambda 表达式 (Visual Basic)
VS2008亮点:用Lambda表达式进行函数式编程

0 0
原创粉丝点击