今想将一些菜单置灰,为什么下面的代码无法控制?
procedure TForm3.FormCreate(Sender: TObject);
begin
   Form2.Free;
   Form3.ShowModal();
   Form3.MainMenu1.Items.Items[0].Enabled:=False;
   Form3.MainMenu1.Items.Items[1].Enabled:=False;
   Form3.MainMenu1.Items.Items[2].Enabled:=False;
   Form3.MainMenu1.Items.Items[3].Enabled:=False;
   Form3.MainMenu1.Items.Items[4].Enabled:=False;
   Form3.MainMenu1.Items.Items[5].Enabled:=False;
   Form3.MainMenu1.Items.Items[6].Enabled:=False;
   Form3.MainMenu1.Items.Items[7].Enabled:=False;
   Form3.MainMenu1.Items.Items[8].Enabled:=False;
end;

解决方案 »

  1.   

    如果你想禁止下拉菜单中的某一条,用下面的语句
      MainMenu1.Items.Items[0].Items[0].Enabled:=False;
    第一个Items[0]指主菜单中横向显示的那些菜单项。
    第二个Items[0]指弹出的下拉菜单中的选项。
      

  2.   

    可以的,但是写成这样更好:
    for j:=0 to 8 do 
      Form3.MainMenu1.Items.Items[j].Enabled:=False;
      

  3.   

    procedure TForm3.FormShow(Sender: TObject);
    begin
       Form2.Free;
       Form3.ShowModal();
       Form3.MainMenu1.Items.Items[0].Enabled:=False;
       Form3.MainMenu1.Items.Items[1].Enabled:=False;
       Form3.MainMenu1.Items.Items[2].Enabled:=False;
       Form3.MainMenu1.Items.Items[3].Enabled:=False;
       Form3.MainMenu1.Items.Items[4].Enabled:=False;
       Form3.MainMenu1.Items.Items[5].Enabled:=False;
       Form3.MainMenu1.Items.Items[6].Enabled:=False;
       Form3.MainMenu1.Items.Items[7].Enabled:=False;
       Form3.MainMenu1.Items.Items[8].Enabled:=False;
    end;
    你试一下
      

  4.   

    我的Form2其实是个用户登陆窗口。
      

  5.   

    本来上述代码是写在Form2里,如下:
    procedure TForm2.BitBtn1Click(Sender: TObject);
    begin
       ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+
       ExtractFilePath(Application.ExeName)+'Lin.mdb;Persist Security Info=True';
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add('select * from TBUser');
       ADOQuery1.SQL.Add('where UserName='''+Edit1.Text+'''');
       ADOQuery1.SQL.Add(' and UserPwd ='''+Edit2.Text+'''');
       ADOQuery1.Active:=True;
       ADOQuery1.Open;
       if (ADOQuery1.RecordCount<>1) then
       begin
          ShowMessage('用户名或密码错误,请检查');
          Edit1.SetFocus;
          Exit;
       end
       else
       begin
          Application.CreateForm(TForm3, Form3);
          if ADOQuery1.FieldValues['UserLevel']='2' then
          begin
          {
             Form3.MainMenu1.Items[0].Enabled:=False;
             Form3.MainMenu1.Items[1].Enabled:=False;
             Form3.MainMenu1.Items[2].Enabled:=False;
             Form3.MainMenu1.Items[3].Enabled:=False;
             Form3.MainMenu1.Items[4].Enabled:=False;
             Form3.MainMenu1.Items[5].Enabled:=False;
             Form3.MainMenu1.Items[6].Enabled:=False;
             Form3.MainMenu1.Items[7].Enabled:=False;
             Form3.MainMenu1.Items[8].Enabled:=False;
             }
          End;
       end;
    end;
    因无法控制,所以改到Form3里试试,可还是不行
      

  6.   

    你试试先把Form3.MainMenu1.Enabled:=False;
    再把要要用的恢复。
      

  7.   

    Form2.Free;   Form3.MainMenu1.Items.Items[0].Enabled:=False;
       Form3.MainMenu1.Items.Items[1].Enabled:=False;
       Form3.MainMenu1.Items.Items[2].Enabled:=False;
       Form3.MainMenu1.Items.Items[3].Enabled:=False;
       Form3.MainMenu1.Items.Items[4].Enabled:=False;
       Form3.MainMenu1.Items.Items[5].Enabled:=False;
       Form3.MainMenu1.Items.Items[6].Enabled:=False;
       Form3.MainMenu1.Items.Items[7].Enabled:=False;
       Form3.MainMenu1.Items.Items[8].Enabled:=False;
       Form3.ShowModal();
    只要把   Form3.ShowModal();放在后面就可以了
      

  8.   

    因为你的代码把窗体SHOW出之后就不对下面的代码进行执行了
    之后关闭FORM3之后才执行
      

  9.   

    把Form3.ShowModal();放在后面我这里就产生了异常。
      

  10.   

    只要把Form3.ShowModal();放在最后面就可以了
      

  11.   

    cscer(石头)因为Form3和Form2相关联,写在Show事件中无法实现,我已试过。
    看来在午饭前无法解决,先吃饭再说。
      

  12.   

    看来只好将代码完整的帖一次了,请大家看一下是什么问题?
    procedure TForm2.BitBtn1Click(Sender: TObject);
    begin
       ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+
       ExtractFilePath(Application.ExeName)+'Lin.mdb;Persist Security Info=True';
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add('select * from TBUser');
       ADOQuery1.SQL.Add('where UserName='''+Edit1.Text+'''');
       ADOQuery1.SQL.Add(' and UserPwd ='''+Edit2.Text+'''');
       ADOQuery1.Active:=True;
       ADOQuery1.Open;
       if (ADOQuery1.RecordCount<>1) then
       begin
          ShowMessage('用户名或密码错误,请检查');
          Edit1.SetFocus;
          Exit;
       end
       else
       begin
          Application.CreateForm(TForm3, Form3);
          if ADOQuery1.FieldValues['UserLevel']='2' then
          begin
            Form3.MainMenu1.Items.Items[0].Enabled:=False;
            Form3.MainMenu1.Items.Items[1].Enabled:=False;
            Form3.MainMenu1.Items.Items[2].Enabled:=False;
            Form3.MainMenu1.Items.Items[3].Enabled:=False;
            Form3.MainMenu1.Items.Items[4].Enabled:=False;
            Form3.MainMenu1.Items.Items[5].Enabled:=False;
            Form3.MainMenu1.Items.Items[6].Enabled:=False;
            Form3.MainMenu1.Items.Items[7].Enabled:=False;
            Form3.MainMenu1.Items.Items[8].Enabled:=False;
          End;
       end;
    end;*************************************************************procedure TForm3.FormCreate(Sender: TObject);
    begin
       Form2.Free;
       Form3.ShowModal();
    end;
      

  13.   

    你这什么代码呀晕倒,
    if not Assigned(Form3) then Form3 := TForm3.Create(Application);
    if ADOQuery1.FieldValues['UserLevel']='2' then
          begin
            Form3.MainMenu1.Items.Items[0].Enabled:=False;
            Form3.MainMenu1.Items.Items[1].Enabled:=False;
            Form3.MainMenu1.Items.Items[2].Enabled:=False;
            Form3.MainMenu1.Items.Items[3].Enabled:=False;
            Form3.MainMenu1.Items.Items[4].Enabled:=False;
            Form3.MainMenu1.Items.Items[5].Enabled:=False;
            Form3.MainMenu1.Items.Items[6].Enabled:=False;
            Form3.MainMenu1.Items.Items[7].Enabled:=False;
            Form3.MainMenu1.Items.Items[8].Enabled:=False;
       end;
       Form3.ShowModal;
    下面的就不要了
    procedure TForm3.FormCreate(Sender: TObject);
    begin
       Form2.Free;
       Form3.ShowModal();
    end;
      

  14.   

    Form3.ShowModal();这句话下面的在FORM3关闭后才会执行。不过你这样的操作是不合理的。Form3.MainMenu1是TFORM3的数据最好不要直接操作,如果以后TFORM3要做什么变动你还要改动FORM2单元的代码。
    最好将的  'UserLevel' 值做为参数给Form3传递。
    ---------------------------------