Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从controls文件夹获取Usercontrols_C#_Winforms_User Controls - Fatal编程技术网

C# 从controls文件夹获取Usercontrols

C# 从controls文件夹获取Usercontrols,c#,winforms,user-controls,C#,Winforms,User Controls,需要将usercontrols动态加载到我的表单中。在选择菜单项时,我有菜单和传递usercontrols的名称 private void MenuItemClickHandler(object sender, EventArgs e) { ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender; MessageBox.Show(clickedItem.Name);

需要将usercontrols动态加载到我的表单中。在选择菜单项时,我有菜单和传递usercontrols的名称

private void MenuItemClickHandler(object sender, EventArgs e)
        {
            ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
            MessageBox.Show(clickedItem.Name);
        }
如何在此事件中加载用户控件?在Asp.Net中,对于这种情况,我使用了LoadControl(“path/name.ascx”)。我没有在winforms中找到模拟。这应该很简单

this.Controls.Add(clickedItem)

但是在此之前,您需要设置clickedItem的位置(即它在表单中的显示位置)

如果您有控件的名称,并且控件已经编译到应用程序中,您可以使用
Activator.CreateInstance
从类型名称创建控件的实例。创建控件实例后,可以将其添加到窗体中。类似下面的代码应该可以工作:

private void MenuItemClickHandler(object sender, EventArgs e)
{
    ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
    var t = Type.GetType("MyNamespace." + clickedItem.Name));
    var control = (UserControl)Activator.CreateInstance(t);
    this.Controls.Add(control);    
}

可以使用窗体的Controls.add()方法或应用程序中使用的面板将实例添加到当前窗体

    public partial class UseUserControl : Form
    {
        public UseUserControl()
        {
            InitializeComponent();
            //Create the user control.
            TempUserControl userControl = new TempUserControl();
            //Add the location to the control.
            userControl.Location = new Point( 40, 40 );
            //Add the control to the current form.
            this.Controls.Add( userControl );
        }
    }