首页 新闻 赞助 找找看

Asp.Net如何利用反射获得页面所有控件(如:Button).

0
悬赏园豆:10 [已解决问题] 解决于 2014-04-17 14:55

Asp.Net如何利用反射获得页面所有控件.(我的框架里面是用的FineUI控件,里面的Button是继承微软的)

 

我也写了一个测试用例:(主要的是找Button控件.)

     代码如下:

            Assembly asm = Assembly.Load("WebUI");//.net中的反射
            Type[] types = asm.GetTypes();
            Page f = null;
            foreach (Type t in types)
            {
                int i = 0;
                if (t.BaseType.Name == "Page")
                {
                    try
                    {
                        f = (Page)Activator.CreateInstance(t, true);
                        if (f != null)
                        {
                            i++;
                            //ListViewItem listItem = new ListViewItem(f.);
                            //listItem.SubItems.Add(f.Text);
                            //listItem.Tag = f;
                            //listForm.Add(listItem);
                            //// listView1.Items.
                            //listView1.Items.Add(listItem);
                        }
                    }
                    catch { }
                }

    但是会报错,Page未将对象引用设置到对象的实例。

   请高手帮忙看看..谢谢

KenyonLi的主页 KenyonLi | 初学一级 | 园豆:165
提问于:2013-10-19 22:06
< >
分享
最佳答案
1

要想获取页面所有的控件,没有必要用反射。

private void GetControlList<T>(ControlCollection controlCollection, List<T> resultCollection)
where T : Control
{
    foreach (Control control in controlCollection)
    {
        //if (control.GetType() == typeof(T))
        if (control is T) // This is cleaner
            resultCollection.Add((T)control);

        if (control.HasControls())
            GetControlList(control.Controls, resultCollection);
    }
}
List<Button> allControls = new List<Button>();
GetControlList<Button>(Page.Controls, allControls )
foreach (var childControl in allControls )
{
//     call for all controls of the page
}

这样就可以了。

收获园豆:10
悟行 | 专家六级 |园豆:12559 | 2013-10-19 22:23

首先,谢谢你的的方案.但是我的项目里面需要实现动态获取所有的控制.嗯.我先说下项目的需求,首先,这个 BaseLoad方法(PageBase类继承System.Web.UI.Page) 写在PageBese类,在这个PageBase类中我在我重写 protected override void OnLoad(EventArgs e),每个页面都继承写好的这个类. 我想的是每当页面加载时,就动态获得这个加载页面的所有控件(如:Button).这样我就能实现,当点击不同页面时,就可以获得不同页面的控件了. 我也查询一些资料,他们说反射好实现.我对反射这个东西很少用,用得不熟悉.(我项目里面引用了FineUI控件,不知道这个影响我之前写的方法.唉..很头痛啊.. 这个控件也是继承 WebConstrols 类(System.Web.UI.WebControls).)

KenyonLi | 园豆:165 (初学一级) | 2013-10-20 10:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册