如何从C#中的继承表单访问父表单中的button_click事件?

时间:2018-07-16 21:54:28

标签: c# asp.net winforms

在Windows窗体应用程序中,我有一个带有工具栏菜单项和按钮的主窗体,这些菜单项和按钮触发特定的继承窗体并在停靠窗口中打开它们。在主表单上,categoryToolStripMenuItem将打开类别表单,这是一个继承的表单,用户可以在其中对数据执行CRUD操作。

另一个继承的形式是产品形式,用户必须从组合框中选择特定类别并将产品添加到该类别,或者编辑并删除该特定类别中的现有产品。为了保持应用程序的正常运行,如果尚未添加任何类别,我希望用户无法打开产品表单。相反,我希望他在添加产品之前先添加一个类别。

他一旦单击打开产品表单的按钮,就不会在数据库中不存在任何类别的情况下触发categoryToolstripMenuItem的click事件。以下是categoryToolStripMenuItem click事件。

procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
var
  Grid: TDrawGrid;
  GR, R: TRect;
begin
  Grid := Sender as TDrawGrid;
  if ARow = Grid.Row then
    Exit;

  GR.Left := Grid.LeftCol;
  GR.Top := Grid.Row;
  GR.Width := Grid.VisibleColCount;
  GR.Height := 0;

  R := TGridCracker(Grid).BoxRect(GR.Left, GR.Top, GR.Right, GR.Bottom);
  InvalidateRect(Grid.Handle, R, False);

  GR.Top := ARow;
  GR.Bottom := ARow;

  R := TGridCracker(Grid).BoxRect(GR.Left, GR.Top, GR.Right, GR.Bottom);
  InvalidateRect(Grid.Handle, R, False);
end;

在我的public void categoriesToolStripMenuItem_Click(object sender, EventArgs e) { if (fCategories == null) { fCategories = new frmCategories(); fCategories.Show(dp, WeifenLuo.WinFormsUI.Docking.DockState.Document); } else { fCategories.Activate(); } } 事件上,我想像这样触发顶部的Product_Load,但它并没有像我需要的那样触发:

categoriesToolStripMenuItem

有什么办法可以访问此活动?

1 个答案:

答案 0 :(得分:0)

请记住,Load事件只会在第一次加载表单时发生(换句话说,是在第一次创建表单时)。如果您隐藏它并显示它,则不会调用您的Load处理程序。您最好处理VisibleChanged事件以触发类别。

此外,直接调用Click处理程序也没错,但是如果您有权访问按钮本身,也可以调用categoryToolStripMenuItem.PerformClick()。然后,您不必担心发送发件人或eventArgs的问题,而Click的所有订阅者都会被调用。