UserControl中的动态事件

时间:2010-11-24 19:37:13

标签: c# .net winforms user-controls dynamic

我使用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,虽然我没有特别说过。

另一件可能很重要的事情:动态事件不在另一个控件中。它位于一个自定义类中,作为一个大型容器对象。

一如既往,非常感谢您的帮助! :)

2 个答案:

答案 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是如何做到的,你会明白为什么。