C# 从controls文件夹获取Usercontrols
需要将usercontrols动态加载到我的表单中。在选择菜单项时,我有菜单和传递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);
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 );
}
}