能不能写成这样:procedure TForm1.OnclickItem(Sender: TObject);
begin
  case (Sender as TRzGroupItem).Tag or (Sender as TMenuItem).Tag of
    1005: OpenForm(TProduct, Product, Self);
    1006: OpenForm(TProductCatena, ProductCatena, Self);
    1007: OpenForm(TPart, Part, Self);
    1008: OpenForm(TValve, Valve, Self);
    2001: OpenForm(Tbtj, btj, Self);
    2002: OpenForm(TProjectDayRpt, ProjectDayRpt, Self);
    2005: OpenForm(TCheckZCP, CheckZCP, Self);
    2006: OpenForm(TCheckZZP, CheckZZP, Self);
    2007: OpenForm(TPartCheck, PartCheck, Self);
    2008: OpenForm(TLingLiao, LingLiao, Self);
    2009: OpenForm(TBuPinBuLiang, BuPinBuLiang, Self);
    3004: OpenForm(TTaiZhang, TaiZhang, Self);
    5001: OpenForm(TBackup, Backup, Self);
    5002: OpenForm(TUser, User, Self);
    5003: OpenForm(TLoginLog, LoginLog, Self);
    5004: OpenForm(TCheckDate, CheckDate, Self);
  else
    Exit;
  end;
end;我的菜单和TRzGroup导航兰都是动态创建的,每个Item得tag都是一样的,
这段代码我不想写两边,因为除了case头部,其他都是一样的。

解决方案 »

  1.   

    估计以上情况用IF ELSE IF会比较好...
      

  2.   

    var
      n: Integer;
    begin
      if Sender is TMenuItem then
        n := TMenuItem(Sender).Tag
      else if Sender is TRzGroupItem then
        n := TRzGroupItem(Sender).Tag
      else
        n := 0;
      case n of:
        ......
    end;
    或者直接
    case TComponent(Sender).Tag of:
      

  3.   

    感谢 前途无亮!第二种方法更简单,但第二种方法好像不识别RzGroupBar--TRzGroupItem
    不知是啥原因?
      

  4.   

    用一个条件就行了。何必用两个呢?你给TMenuItem指定OnClick事件代码后;
    TRZGroupItem的OnClick事件可以指向同一个功能的MenuItem的OnClick事件。
      

  5.   

    没用过TRzGroupBar,不能识别可能是因为TRzGroupItem不是TComponent的子类。Delphi基本控件的Tag属性都是从TComponent继承来的。
      

  6.   

    如果TRzGroupItem不是TComponent的子类,可以这样写
    var
      n: Integer;
    begin
      if Sender is TComponent then
        n := TMenuItem(Sender).Tag
      else if Sender is TRzGroupItem then   --非TComponent的子类
        n := TRzGroupItem(Sender).Tag
      else
        n := 0;
      case n of:
        ......
    end;
      

  7.   

    弄错了,如果TRzGroupItem不是TComponent的子类,可以这样写 
    var
      n: Integer;
    begin
      if Sender is TComponent then
        n := TComponent (Sender).Tag
      else if Sender is TRzGroupItem then   //非TComponent的子类
        n := TRzGroupItem(Sender).Tag
      else
        n := 0;
      case n of:
        ......
    end;