baseform中的激活事件不会触发

时间:2012-03-29 08:29:32

标签: c# winforms inheritance

在这里输入代码我已经构建了一个基于两个基础形式的winform MDI应用程序,一个带有网格的列表形式(_ListForm)和一个显示子数据的数据形式(_DataForm)。

当我将继承的数据形式加载到MDI中时,将触发基本形式(_DataForm)中的激活事件,并自动设置某些属性。当我将继承的listform(_ListForm)加载到MDI中时,激活的事件被触发。

我的childform没有(覆盖)激活事件,两种形式没有显着差异,只有一种触发事件,一种不触发。

  • 我在代码和/或设计师中添加了eventhandler:no 触发
  • 我在子窗体中添加了一个新的激活事件并被调用 base.onActivated(e):无触发器

现在我把一些代码移到了textchanged事件中(也发生了一次),但是为什么没有触发这个Activated-event呢?

如果需要,可以添加大量的代码示例,但不确定要发布的内容。

编辑:忘记提及,它与LoadEvent相同 - 不会以任何方式触发。

编辑:根据要求提供来源:

_BaseForm:字体和一般背景(无事件)

public partial class _BaseForm : Form
{
    public _BaseForm()
    {
        InitializeComponent();
    }

_ListForm:网格和按钮

public partial class _ListForm : _BaseForm
{
    public _ListForm()
    {
        InitializeComponent();
        this.Activated += new EventHandler(_ListForm_Activated);
        this.DialogResult = System.Windows.Forms.DialogResult.Cancel;

        this.grid1.UltraGrid.DisplayLayout.Bands[0].Columns.ClearUnbound();
        this.grid1.UltraGrid.DisplayLayout.Override.AllowAddNew = Infragistics.Win.UltraWinGrid.AllowAddNew.No;
        this.grid1.UltraGrid.DisplayLayout.Override.AllowDelete = Infragistics.Win.DefaultableBoolean.False;
        this.grid1.UltraGrid.DisplayLayout.Override.AllowUpdate = Infragistics.Win.DefaultableBoolean.False;
        this.grid1.UltraGrid.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.RowSelect;

        this.grid1.PopulateGridColumns += new FB.Windows.Controls.Grid.PopulateGridColumnsEventHandler(grid1_PopulateGridColumns);
        this.grid1.UltraGrid.InitializeLayout += new Infragistics.Win.UltraWinGrid.InitializeLayoutEventHandler(UltraGrid_InitializeLayout);
        this.grid1.RowSelected += new FB.Windows.Controls.Grid.RowSelectedEventHandler(grid1_RowSelected);
    }

_ListForm事件(在设计器中或来自ctor的代码中):

    this.Activated += new System.EventHandler(this._ListForm_Activated);
    this.Load += new System.EventHandler(this._ListForm_Load);

活动本身:

private void _ListForm_Activated(object sender, EventArgs e)
{
    if (AutoSearchOnOpen)
    {
        button1_Click(sender, e);
        this.grid1.Focus();
        this.ActiveControl = this.grid1;
    }
    else
    {
        this.textBox1.Focus();
        this.ActiveControl = this.textBox1;
    }
}

我知道激活事件中的Click会在每次激活时触发,但是现在无关紧要:主要问题是:整个事件不会触发。虽然_DataForm中的事件(也是从_BaseForm继承)被触发。

1 个答案:

答案 0 :(得分:0)

在这种情况下,网格(第三方控件)重载(劫持)表单的激活和加载事件,并且不会在原始事件之后触发基本事件。