c# - 如何在表单中动态添加自定义控件

标签 c# winforms

我有一个程序,我在其中动态添加控件。控件类型基于 database 中的值。例如,如果 Database 中的值为 Label,则程序将动态创建控件。

动态创建控件效果很好。我正在使用以下功能:

Type typeFrm = typeof(Form);
Assembly assb = typeFrm.Assembly;
Type controlType = assb.GetType("System.Windows.Forms." + strType);
object obj = Activator.CreateInstance(controlType);
Control control = (Control)obj;
return control;

然后 Control ctrl = CreateControl(strCtrlType);

其他代码用于设置控件的位置、宽度、高度等。

我的问题是我有一个自定义控件,如何将它动态添加到表单中?我尝试了上面的功能并更改了行:

Type controlType = assb.GetType("System.Windows.Forms."+ strType);

Type controlType = assb.GetType("CustomCtrl."+ strType);

但是它不起作用。该函数始终返回 null

查看示例自定义控件代码。

namespace CustomCtrl
{
public class CButton : Button
 {        
    public CButton() : base()
    {

    }
 }
}

最佳答案

下面是如何从程序集中获取类型。假设您在名为 Some.dll 的 dll 中有一个全名(类名 + 命名空间)SomeNamespace.SomeClass 的类:

Type type = Type.GetType("SomeNamespace.SomeClass, 
    Some"); // without .dll

所以在你的情况下它将是:

Type type = Type.GetType("CustomCtrl.CButton, 
    DllWhereCButtonIs"); // without .dll

关于c# - 如何在表单中动态添加自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47482637/

相关文章:

c# - 我正在尝试编写 WebApi 代码以使用 POST 请求将图像文件发送到 Node.js

c# - 为什么不能继承/分层强制执行泛型类型约束

c# - 为什么在某些情况下 Request.QueryString 将 + 替换为空字符?

c# - EF 核心 2.1 中的 COUNT(DISTINCT *)

c# - Zen 带字符的条码。 Winforms

c# - 是否可以从 Excel 电子表格 (VBA) 中获取 WinForms "Button"?

c# - Json.Net 在反序列化列表时调用属性 getter,导致重复项

c# - 打印 Excel 工作表/工作簿

c# - 为什么我的工具提示不显示它的提示?

c# - 以表格形式显示数据 C#