在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
有什么办法可以访问此活动?
答案 0 :(得分:0)
请记住,Load事件只会在第一次加载表单时发生(换句话说,是在第一次创建表单时)。如果您隐藏它并显示它,则不会调用您的Load处理程序。您最好处理VisibleChanged事件以触发类别。
此外,直接调用Click处理程序也没错,但是如果您有权访问按钮本身,也可以调用categoryToolStripMenuItem.PerformClick()。然后,您不必担心发送发件人或eventArgs的问题,而Click的所有订阅者都会被调用。