如何在父类中调用EventHandler

时间:2009-07-10 10:51:24

标签: c# winforms inheritance event-handling

我已经将Click-event的EventHandler添加到了一个图片框但是在运行时这个处理程序从不被调用(调试器显示它直接添加到控件中,但是当我点击图片框时没有任何反应)。

我认为它与我的继承有关。我有一个名为AbstractPage的usercontrol(它不是真的抽象,因为设计师不喜欢它),它只包含一个标题和这个图片框,但它提供了实际页面所依赖的一些功能。

#region Constructor
public AbstractPage()
{
    InitializeComponent();
    lblHeading.Text = PageName;
    picLock.Click += new EventHandler(picLock_Click);
}
#endregion

#region Events
void picLock_Click(object sender, EventArgs e)
{
    ...do some stuff
}
#endregion

页面实现只是继承了这个类并添加了它们的控件和行为。我们最近发现子类化UserControl并不具备性能,我们在那里失去了一些性能,但它是最好的方法(我不希望c& p函数为25页并维护它们)。

我的网页A看起来像这样

public partial class PageA : AbstractPage
{
    #region Constructor
    public PageA()
    {
    // I dont call the base explicitely since it is the 
    // standard constructor and this always calls the base
        InitializeComponent();
    }
    #endregion

    public override string PageName
    {
        get { return "A"; }
    }

    public override void BindData(BindingSource dataToBind)
    {
    ...
    }

无论如何, picLock_Click 从未被调用过,我不知道为什么?

这些页面都被放入一个PageControl,它包含一个TreeView和一个TabContainer,一旦我调用addPage(IPage),就会放置页面

public partial class PageControl {
    ...
protected virtual void AddPages()
{
    AddPage(new PageA());       
    AddPage(new PageD());
    AddPage(new PageC());
    ...
}

protected void AddPage(IPage page)
{
    put pagename to treeview and enable selection handling
    add page to the tabcontainer    
}

提前致谢

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,这对我开箱即用(使用VS2k8)。我的代码:

public partial class BaseUserControl : UserControl
{
    public BaseUserControl()
    {
        InitializeComponent(); //event hooked here
    }

    private void showMsgBox_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Button clicked");
    }
}

public partial class TestUserControl : BaseUserControl
{
    public TestUserControl()
    {
        InitializeComponent();
    }
}

我将TestUserControl移动到表单,单击按钮并按预期获得消息框。你可以粘贴一些代码,例如你如何使用你的AbstractPage?

答案 1 :(得分:1)

我发现了问题。我们正在使用Infragistics WinForms,但在这种情况下我使用了标准的图片框。我用UltraPictureBox替换它,现在它可以工作。