还是动态生成一个控件

首先,利用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);

转载于:https://www.cnblogs.com/cheatlove/articles/381116.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象和面向过程的区别

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解…

LeetCode—284. 顶端迭代器

284. 顶端迭代器 题目描述: 请你在设计一个迭代器,在集成现有迭代器拥有的 hasNext 和 next 操作的基础上,还额外支持 peek 操作。 实现 PeekingIterator 类: PeekingIterator(Iterator nums) 使用指定整数迭代器 nums 初始化迭…

sql查询

连接查询(多表查询) from 表1 [连接方式] join 表2 [on 连接条件]; 交叉连接: select * from 表1 join 表2 交叉查询查出的数据比较混乱 所以用的比较少。 内连接: from 表1 [inner] join 表2 on 表1.字段1…

我想和你一起去这样一个地方

当我从网站看到这则图片,我不禁惊叹有这样一个世外桃源,可以这样漂亮这样水天一色,我是多渴望能够与深爱的人一起去这个地方,享受我们休闲的白天,度过我们浪漫的夜晚,就这样,我也愿意和你每天每夜呆在一起.当我看到这则相片的时候,我心里只想着他,想和他一起去度假,我很喜欢痴住…

LeetCode—50. Pow(x, n)

50. Pow(x, n) 题目描述: 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n )。 考察重点:倍乘,使用递归,每次addN取2,4,8,16…个数进行累乘,直到addN > n,则用n-ad…

Vue学习笔记(八) 组件进阶

1、插槽 &#xff08;1&#xff09;插槽内容 像 HTML 元素一样&#xff0c;我们常常需要给组件传递内容 比如在下面的例子中&#xff0c;我们给自定义组件 prompt-info 传入 出错啦 的文本 <!DOCTYPE html> <html><head><title>Demo</title><…

php结合jquery异步上传图片(ajaxSubmit)

2019独角兽企业重金招聘Python工程师标准>>> php结合jquery异步上传图片&#xff08;ajaxSubmit&#xff09;&#xff0c;以下为提交页面代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/T…

使 Framework 2.0 的程序集不用安装 Framework 就可以运行的工具免费发布了

感谢大家长时间以来对 MaxtoCode 的支持.Jason.NET 决定推出一款免费的 Framework 2.0 打包工具.它可以使你的 .NET 程序在不安装 Framework 的情况下依然正常运行. 下面有一个 著名的大型开源项目 SharpDevelop (C# 的 IDE) 的例子. 下载地址: http://www.maxtocode.com.cn/do…

LeetCode—287. 寻找重复数

287. 寻找重复数 题目描述&#xff1a; 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有一个重复的整数 &#xff0c;返回这个重复的数 。 你设计的…

发发牢骚,觉得走c#这条路,不该太浮躁

校园招聘结束了&#xff0c;腾讯&#xff0c;华为&#xff0c;百度&#xff0c;完美时空&#xff0c;网易&#xff0c;阿里&#xff0c;让我觉得.NET很受歧视。清一色的C/C,JAVA&#xff0c;只有网易有一点.Net的&#xff0c;但是都是非核心的运维工作。 不错&#xff0c;招.N…

Microsoft Windows Workflow Foundation 入门

Microsoft Windows Workflow Foundation 的包含在 .Net Framework 3.0 中&#xff0c;除此之外i&#xff0c;基于它做开发还要安装 Visual Studio 2005 Extensions for Windows Workflow Foundation 。本文撰写的对象为 Windows Workflow Foundation beta 1&#xff1a;开发人员…

套套

5.9 第一个跑入mc&#xff0c;人数不够&#xff0c;活动取消&#xff0c;未参加。5.12 网络断&#xff0c;在实验室开会5.14 网络断5.19 mc 1-9&#xff0c;20dkp&#xff0c;未拿东西5.26 mc 1-9 夜幕杀杀手护腿.-4 dkp5.30 购买 夜幕杀手护腕 100G6.2 和BWL活动冲突&#xff…

Typecho 新浪登陆插件 Sinauth

花了点时间弄了一个插件。 代码地址&#xff1a;https://github.com/web3d/plugins/tree/master/Sinauth Typecho的扩展机制还是比较完善的&#xff0c;可以自行增加Action、Route、扩展现有Widget功能、后台插件配置界面等。 偷懒&#xff0c;使用的是SAE中封装的sdk访问新浪开…

LeetCode—51. N 皇后(困难)

51. N 皇后&#xff08;困难&#xff09; 题目描述&#xff1a; n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击&#xff0c;即令其中任意两个皇后都不同列、同行和在一条斜线上。 给你一个整数 n &#xff0c;返回所有不…

使用javasript 遍历页面CheckBox

使用javasript 遍历页面CheckBox<html><head><script>function aaa(){var result"";for(var i0;i<checkform.checkboxlist.length;i){if(checkform.checkboxlist[i].checked){alert(checkform.checkboxlist[i].value);}else{……文章来源:http:…

unity 角色换装

unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性&#xff1a; 更改mesh:mesh决定了部位的物体的外形&#xff0c;是主要的数据。 刷新骨骼&#xff1a;同一个部位下&#xff0c;不同的mesh受到的不同的骨骼的影响不同&#xff0c;因此更换mesh之后&…

Hadoop:pig 安装及入门示例

pig是hadoop的一个子项目&#xff0c;用于简化MapReduce的开发工作&#xff0c;可以用更人性化的脚本方式分析数据。 一、安装 a) 下载 从官网http://pig.apache.org下载最新版本(目前是0.14.0版本)&#xff0c;最新版本可以兼容hadop 0.x /1.x / 2.x版本&#xff0c;直接解压到…

SQL DISTINCT 多字段查询用法

使用distinct 的困惑: 我现在有一个表book有两个字段 作者 作品 auther article 记录值如下 张三 作品一 李四 作品二 张三 作品三 张三 作品四 李四 作品五 王五 作品六 我现在想读取每位作者的代表作和作者姓名 也就是如下数据 张三 作品一 李四 作品二 王五 作品六 如果用se…

LeetCode—289. 生命游戏

289. 生命游戏 题目描述&#xff1a; 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初…

Java注解的基本概念和原理及其简单实用

一、注解的基本概念和原理及其简单实用 注解&#xff08;Annotation&#xff09;提供了一种安全的类似注释的机制&#xff0c;为我们在代码中添加信息提供了一种形式化得方法&#xff0c;使我们可以在稍后某个时刻方便的使用这些数据&#xff08;通过解析注解来使用这些数据&am…