我使用GUI创建了一个自定义UserControl,我不能让它接受来自自定义类的动态添加事件。 对不起,如果我从内存中得到确切的代码错误,但你得到了要点。 C#.NET 2008,Winform
我有一个“容器类”,用于存储我的所有信息 主WinForm有一个这样的数组,每个都有一个摘要面板。 主窗体还有一个“工作区”,可以让您访问容器类。
这个想法是,与CustomUserControl交互将导致在ContainerClass中发生的事情。控件使用那里的信息,我希望它从那里更新。
ContainerClass
{
CustomUserControl tempControl;
public ContainerClass()
{
//do stuff
tempControl = new CustomUserControl([send information]);
tempControl.Click += new Event(localClickEvent);
}
public void localClickEvent(object sender, Event e)
{
//do stuff
}
}
public class Form1
{
public Form1()
{
//create several container objects
//for each container object, get it's SummaryPanel
//and add it to the FlowLayoutPanel
CustomUserControl tempControl = ContainerObject.GetCustomControl();
flp_summaryPanel.Controls.Add(tempControl);
}
}
当我执行此代码时,动态事件永远不会触发。 我以前做过这种事情,但总是使用继承我需要的控件的自定义类。我从未继承过UserControl,所以我怀疑我遗漏了一些东西。 我认为这是一个保护问题,但编译器没有抓住它。
更多信息
这在某种程度上被标记为ASP.net问题。不是,我正在使用Winforms,虽然我没有特别说过。
另一件可能很重要的事情:动态事件不在另一个控件中。它位于一个自定义类中,作为一个大型容器对象。
。
一如既往,非常感谢您的帮助! :)
答案 0 :(得分:0)
在将控件添加到Controls
集合
public ParentControl()
{
CustomUserControl tempControl = new CustomUserControl();
this.Controls.Add(tempControl);
tempControl.Click += new Event(localClickEvent);
}
这可能与以下事实有关:除非将控件添加到NamingContainer,否则无法正确生成ClientID。
答案 1 :(得分:0)
您使用的是哪个版本的C#?试试这个:
public void ParentControl_Init()
{
CustomUserControl tempControl = new CustomUserControl();
this.Controls.Add(tempControl);
tempControl.Click += localClickEvent;
}
public void localClickEvent(object sender, EventArgs e)
{
//do stuff
}
您不希望在构造函数中添加控件和附加事件。看看ASP.NET是如何做到的,你会明白为什么。