`
tubaluer
  • 浏览: 1499790 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

在.NET上如何根据字符串动态创建控件

 
阅读更多

在.Net上用字符串动态创建控件是通过反射来实现。

首先,利用System.Type.GetType方法,获得字符串中指定的控件的类型实例。

这里需要注意这个字符串的语法,根据msdn的解释:

  1. 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。
  2. 对于反射,属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性,但派生类中仅有 get 访问器,则派生类属性隐藏基类属性,并且您将无法访问基类的设置程序。
  3. 自定义特性不是通用类型系统的组成部分。

不对数组或 COM 类型执行搜索,除非已将它们加载到可用类表中。

typeName 可以是简单的类型名、包含命名空间的类型名,或是包含程序集名称规范的复杂名称。

如果 typeName 只包含 Type 的名称,则此方法先是在调用对象的程序集中进行搜索,然后在 mscorlib.dll 程序集中进行搜索。如果 typeName 用部分或完整的程序集名称完全限定,则此方法在指定的程序集中进行搜索。

AssemblyQualifiedName 可以返回完全限定的类型名称(包含嵌套类型和程序集名称)。所有支持公共语言运行库的编译器将发出嵌套类的简单名称,并且当被查询时,反射依照下列约定构造一个 mangled 名称。

例如,类的完全限定名可能类似于如下形式:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

但是直接使用Type.GetType("System.Windows.Forms.TextBox")获得Type是Null。这是因为,Windows.Forms程序集是公有的程序集,是位于程序集缓存中的,而这个程序集有不同的版本,为了确定使用的版本,我们不仅要提供程序集的名称,还要提供程序集的版本和强名称。照这个思路,在使用的.net Framework 1.1上,将这一句写成Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")。现在运行就没有问题了。问题是我们如何取得所用Windows.Forms程序集的版本和强名称?可以用GetType(CheckBox).AssemblyQualifiedName这样的语法,一旦得到了这些信息,我们就可以将这些信息用于其它任何控件,因为他们都来自于同一个版本Windows.Forms程序集。

利用上面说到的方法,现在就可以使用System.Activator.CreateInstance方法来创建一个TextBox控件了:

public static void CreateControl(string controlType, Form form, int positionX, int positionY)
{
try
{
string assemblyQualifiedName = typeof(System.Windows.Forms.Form).AssemblyQualifiedName;
string assemblyInformation = assemblyQualifiedName.Substring(assemblyQualifiedName.IndexOf(","));

Type ty = Type.GetType(controlType + assemblyInformation);
Control newControl = (Control)System.Activator.CreateInstance(ty);
form.SuspendLayout();
newControl.Location = new System.Drawing.Point(positionX, positionY);
newControl.Name = ty.Name + form.Controls.Count.ToString();
form.Controls.Add(newControl);
form.ResumeLayout();
}
catch(Exception ex)
{
throw ex;
}
}

调用: CreateControl("System.Windows.Forms.TextBox", this, 10, 10);

分享到:
评论

相关推荐

    C# 根据字符串动态生成控件(反射原理),可鼠标拖动

    在本文中,我们将深入探讨如何使用C#编程语言根据字符串动态生成控件,结合反射原理以及实现这些控件的鼠标拖动功能。首先,我们来理解什么是反射以及它在C#中的作用。 反射是.NET框架提供的一种强大特性,它允许...

    Asp.net 验证码控件

    它通常要求用户输入图像上显示的一串随机字符,以此来验证用户是真实的人而不是程序。在本篇文章中,我们将深入探讨Asp.net验证码控件的工作原理、类型以及如何在实际项目中应用。 **1. Asp.net验证码控件的原理** ...

    Asp.net第三方控件和验证码控件

    在实际应用中,Asp.net的验证码控件工作原理通常是生成一个随机字符串或图形,并将其存储在服务器端的会话状态中。当用户输入验证码时,系统会比对客户端输入与服务器端保存的值是否一致,以此判断输入是否有效。...

    基于ASP.NET实现的可编辑的下拉框控件程序例子

    `Web.Config`是ASP.NET应用程序的配置文件,它定义了应用的设置,如数据库连接字符串、身份验证模式和其他运行时配置。 `Default.aspx.cs`是C#源代码文件,它包含了与`Default.aspx`相关的后台逻辑。在这个例子中,...

    Asp.net弹出对话框控件

    在Asp.net中,可以通过服务器端代码根据需求动态创建HTML元素,然后通过JavaScript显示在对话框中。这在处理数据验证、用户输入或其他需要自定义对话框内容的场景中非常有用。 6. **Global.asax和Web.config** `...

    ASP.NET 2.0 的数据源、数据绑定控件概述与区别

    例如,`GridView` 控件可以绑定到 `SqlDataSource`,并根据查询结果动态生成表格。当用户在 `GridView` 中选择某一行时,可以触发 `SelectedIndexChanged` 事件,此时可以通过 `SelectedValue` 或 `SelectedIndex` ...

    asp.net生成随机验证码控件

    下面将详细解释如何在ASP.NET中创建一个自定义的随机验证码控件,并探讨相关的编程技术。 验证码(CAPTCHA)的主要目的是区分人与机器,它通常由一串随机字符组成,这些字符可能是数字、字母或者两者的组合,有时会...

    ASP.net图片显示控件

    使用这些文件,开发者可能创建了一个自定义的ASP.NET控件,它可以动态加载服务器上的图片,根据需要调整大小,甚至支持其他高级功能,如图片缩略图、预览和缓存管理。在实际开发中,可能还涉及到数据库操作,以存储...

    ComboBox显示图片及下拉框根据字符串长度动态伸缩

    - 创建一个简单的WinForm或WPF应用程序,将自定义的ComboBox控件拖放到界面上,添加一些带有图片和不同长度字符串的项进行测试。 - 检查下拉框是否能正确显示图片,以及其宽度是否能根据字符串长度动态变化。 ...

    ext.net 动态创建gridpanel

    在Ext.NET中,动态创建GridPanel意味着在运行时根据需要生成组件。这通常涉及到在服务器端代码(如C#或VB.NET)中创建GridPanel对象,设置其属性,然后将它添加到对应的容器中。`newtpanel.aspx.cs` 文件很可能是...

    .net下功能強大的Datagrid控件

    这个控件提供了丰富的功能,能够帮助开发者轻松地在网页上创建表格,显示数据库中的数据,并允许用户进行编辑、排序、筛选等操作。 Datagrid控件的核心特性包括: 1. 数据绑定:.NET的Datagrid控件可以方便地与...

    asp.net 数据绑定控件

    在这些Demo中,你会学习到如何配置数据源(如连接字符串、查询语句)、如何绑定数据控件、如何处理事件(如点击、编辑、删除),以及如何利用数据绑定控件的模板来实现自定义界面。通过实践这些示例,开发者能更好地...

    ASP.NET+SQL SERVER动态网站开发从基础到实践

    第五章,将探讨ASP.NET的页面间通信和导航,包括URL路由、查询字符串、隐藏字段等,这些都是构建多页面应用程序时必须掌握的技术。 第六章的源代码着重展示了如何实现用户认证和授权,这是任何Web应用程序安全性的...

    asp.net与xml制作导航控件

    在本篇文章中,我们将深入探讨如何使用ASP.NET结合XML来创建动态导航控件的方法。这种方法不仅能够提升网站的用户体验,还能让网站结构更加清晰、易于维护。以下将从标题及描述中提取的关键知识点进行详细解释。 ##...

    Asp.net自定义控件

    在ASP.NET中,自定义控件是开发人员为了满足特定需求而创建的用户界面元素。它们可以扩展内置的ASP.NET控件,或者完全是从头构建的新控件。本主题将深入探讨Asp.net自定义控件、复合控件、远程修改配置文件以及IIS...

    asp.net c#如何创建Web数据库动态管理系统

    在使用ASP.NET C#创建Web数据库动态管理系统时,你需要掌握一系列关键技术和步骤。这个系统能够让你通过Web界面与数据库进行交互,实现数据的增删改查等操作。下面将详细介绍这个过程。 首先,理解基础架构是至关...

    asp.net 计算字符串中各个字符串出现的次数

    在这里,我们使用了一个`Repeater`控件来动态地生成表格,显示每个字符串及其出现的次数。在`.aspx`页面上,我们定义了一个`Repeater`控件,并设置了它的数据源和数据绑定事件: ```html 字符 次数 ...

    新闻列表分页控件ASP.NET

    5. **Web.Config配置文件**:Web.Config是ASP.NET应用程序的配置文件,用于存储应用程序的设置,如数据库连接字符串、身份验证和授权规则等。在这个项目中,分页控件的设置可能包含其中。 6. **Master Page**:...

    ASP.NET 控件的使用

    9.1.3 在Web配置文件中保存连接字符串 258 9.1.4 对连接字符串加密 260 9.2 执行数据库命令 261 9.2.1 执行内联SQL语句 261 9.2.2 执行存储过程 263 9.2.3 过滤数据库行 264 9.2.4 改变数据源模型 266 9.2.5 处理SQL...

Global site tag (gtag.js) - Google Analytics