ScribeFire 的快速广告 工作
Jul 09

今天遇到了一个问题,有十个控件,名称很类似,只是尾数不同.操作也是一样的,只是各个取得数据的条件不同.但是事件还是一样的.一个个单独的去写有些繁琐.比较方便的办法就是把他们作为整体去处理.在赋值和读数据的时间使用循环操作.

而这时,利用控件的名字获得控件就是一个很重要的环节了.

”’ <summary>
”’ 根据名称取得控件
”’ </summary>
”’ <param name="Name">控件名</param>
”’ <param name="CurrentForm">窗体</param>
”’ <returns></returns>
”’ <remarks></remarks>
Private Function GetControlByName (ByVal Name As String, ByVal CurrentForm As Form) As Control
    Dim info As FieldInfo = _
            CurrentForm.GetType().GetField("_" & Name, _  “”此处的下划线让我郁闷了
                                            BindingFlags.NonPublic Or _
                                            BindingFlags.Instance Or _
                                            BindingFlags.Public Or _
                                            BindingFlags.IgnoreCase)
    Dim a As Object = CurrentForm.GetType.GetMembers()
    Dim files As System.Reflection.FieldInfo() = CurrentForm.GetType.GetFields()
    If Not info Is Nothing Then

        Return CType(info.GetValue(CurrentForm), Control)
    End If
    Return Nothing
End Function

这里有点不一样的就是在控件名称前面要加上一个”_”这个可能是VB.NET和C#.NET的区别吧.VB.NET中反射的时间,会在所有控件前面加一个”_”,至于这其中的用意,不是很理解.不过,VB.NET本身就很怪异了.

bookmark

written by 刘浏 \\ tags:

One Ping to “通过名称获得控件”

  1. 反射|liu6’s blog Says:

    [...] 前些天用到了反射,反射往简单了说就是和定于对象相反的一个过程.所以通过反射得到的就是一个对象,模块,程序集的类型了.就是这么简单的一个东西.不过,里来越是简单的东西,越是复杂.呵呵,就是?:这个三元运算符一样.下面是很简单的一个例子. [...]


Leave a Reply