C# 在C中动态创建控件的方法#

C# 在C中动态创建控件的方法#,c#,.net,controls,runtime,C#,.net,Controls,Runtime,您可以用什么方法在C#中动态创建控件 起初这是对象,但更确切地说是控件。我的术语搞砸了。谢谢你,乔尔 编辑{ 在运行时创建的控件。并且程序能够访问和编辑这些控件。 这有用吗? } 我喜欢动态创作的想法,想知道有什么方法可以做到这一点 请每个答案只选一个,我想看看人们对他们的排名 乙二醇 private Label\u lblCLastName=new Label(); 私有静态列表_ListCP=new List(); 公共面板(面板容器) { //创建控件 #区域控制 _pnlStudent

您可以用什么方法在C#中动态创建控件

起初这是对象,但更确切地说是控件。我的术语搞砸了。谢谢你,乔尔

编辑{ 在运行时创建的控件。并且程序能够访问和编辑这些控件。 这有用吗? }

我喜欢动态创作的想法,想知道有什么方法可以做到这一点

请每个答案只选一个,我想看看人们对他们的排名

乙二醇

private Label\u lblCLastName=new Label();
私有静态列表_ListCP=new List();
公共面板(面板容器)
{ 
//创建控件
#区域控制
_pnlStudent.Controls.Add(_lblCLastName);
//  
//lblCLastName
//  
_lblCLastName.AutoSize=true;
_lblCLastName.Location=新系统.图纸.点(6,32);
_lblCLastName.Name=“lblCLastName”;
_lblCLastName.Size=新系统图尺寸(58,13);
_lblCLastName.TabIndex=10;
_lblCLastName.Text=“姓氏”;
//将控件添加到“选定窗体”面板
Container.Controls.Add(_pnlStudent);
//在类中创建已创建面板的列表
//所以我可以访问用户输入
添加(本);
} 
这是一段代码片段,与我所说的内容非常接近。我又发了一篇帖子,但没有把问题发对。我将删除它,但它仍然是可见的

如果仍然有问题,请建设性的,我不介意消极的意见,只要它是有益的

编辑:
我能得到一些我一直在寻找的答案。感谢所有回复的人。我也会在我有能力的时候关闭这个。如果其他人可以关闭它,我们将不胜感激。

我使用new关键字动态创建对象。

假设您正在谈论动态对象的创建:

很明显,您需要一个库来支持这一点,除非您想进入
反射.Emit
自己-LinFu在版本1中支持这一点:

然而,我似乎还记得,这是在版本2之前放弃的一项功能。

,C#3.x

这是相当动态的,因为您不必编写类模板来获取自定义对象

// An anonymous object with two properties: obj.Name and obj.Age
var obj = new { Name = "Joe", Age = 35  };
编译器将根据您提供的初始化值推断属性的类型

该类型无法从源代码中访问,但可以在IL中看到。但是,如果创建多个具有相同属性的匿名对象,C#编译器将对所有这些对象使用相同的类型

// All objects use the same anonymous type
var obj1 = new { Name = "Joe", Age = 1  };
var obj2 = new { Name = "Art", Age = 30  };
var obj3 = new { Name = "Sally", Age = 25  };

// A different (second) anonymous type
var objDifferent = new { Phone = "555-555-1212", Name = "Joe", Age = 1  };
规定还有更多,但这些都很重要

  • var只能在方法范围内使用(作为局部变量),而不能在类范围内使用
  • 匿名对象具有只读属性;不能将数据重新分配给它们
激活(也适用于远程对象)

使用类的重载方法。这就进入了本地或远程创建对象的领域

using System;

/* Create instances of a Random number generator (or any class)
 *  without using the 'new' operator.
 */
Random rand1 = Activator.CreateInstance<Random>();
Random rand2 = (Random)Activator.CreateInstance(typeof(Random));
//etc...
使用系统;
/*创建随机数生成器(或任何类)的实例
*不使用“新”运算符。
*/
Random rand1=Activator.CreateInstance();
Random rand2=(Random)Activator.CreateInstance(typeof(Random));
//等等。。。

()

动态创建GUI对象可能非常有用,但也可能是维护的噩梦

一个好的经验法则是限制动态创建的GUI对象的数量

在一种情况下,您可能实际上希望使用动态创建的GUI对象,即您不知道所需对象的数量或数量。例如,结果集中每行的一个标签(即使您可以考虑DATAGRID或GRIDVIEW类型对象)。

这适用于WinForms和ASP.NET。只需确保正确记录代码即可

我的建议是,对于更简单的表单,使用可视化设计器,只有在绝对必要时才动态创建和添加对象


(FWIW,您发布的代码片段可能会被简化和/或重构,因为它似乎朝着错误的方向发展。)

我将此理解为动态对象的创建-请编辑以澄清任何一种方式。创建对象是什么意思?你是指实例化还是在运行时创建一个类?我想我在提问时失败了。>>@serhio我们不能假设Hazior不理解如何通过问题使用
新的
操作符。他的问题的目的是发现新的(没有双关语)和可能的各种动态创建对象的方法。这并没有反映出他的基本知识。确实有不同的方法来创建对象。@Harizor:那么你的问题是什么,我不明白。您知道
Label myLabel=new Label()超过,您可以使用
lebelParent.Controls.add(myLabel)将其添加到父级那么,还有什么还不清楚?谢谢。我没有想到新关键字的这种奇特用法;)答案值得(最初的)问题。它可能是,但它是作为一个轻微的,而不是作为一个答案创建的。他非但没有帮助我恰当地表达我的问题,反而嘲笑了我,显然这种事情得到了支持。@Hazior:事实上,没有嘲笑的意思。“新建”不会动态创建对象。作为一个开始使用C语言编程的人,我必须
alloc()
为指向stucts的指针留出空间,我经常觉得那些只使用现代语言的人对正在发生的事情和新事物的力量没有真正的感觉。@Hogan:很抱歉,我误解了。大卫,下去。
new
关键字正在这里讨论:)David就在这里。动态创建对象是另一回事。AFAIK VB有一个C#没有的
后期绑定
。@jdk-哇,谢谢-谢谢你救了我的脸红Logan。这更是我想要的。也许我
using System;

/* Create instances of a Random number generator (or any class)
 *  without using the 'new' operator.
 */
Random rand1 = Activator.CreateInstance<Random>();
Random rand2 = (Random)Activator.CreateInstance(typeof(Random));
//etc...