procedure TF_Find.FieldChange(Sender: TObject);
var
  AField:TField;
  FieldElement:TFieldElement;
begin
  C_Relation.Clear;  if C_FieldList.Items.Count = 0 then
    Exit;
  FieldElement := TFieldElement(C_FieldList.Items.Objects[C_FieldList.ItemIndex]);//这句什么意思?
  AField := FDataSet.FindField(FieldElement.FField);
  if not Assigned(AField) then
    Exit;
  case AField.DataType of
    ftString, ftFixedChar, ftWideString:
      begin
        C_Relation.AddItem('等于',TObject(TRelation(Equal)));//这句TObject(TRelation(Equal))什么意思?是类型转
        C_Relation.AddItem('不等于',TObject(TRelation(NotEqual)));//换吗?为什么不直接转成Tobject.
        C_Relation.AddItem('小于',TObject(TRelation(Less)));
        C_Relation.AddItem('小于等于',TObject(TRelation(LessEqual)));
        C_Relation.AddItem('大于',TObject(TRelation(Greater)));
        C_Relation.AddItem('大于等于',TObject(TRelation(GreaterEqual)));
        C_Relation.AddItem('包含',TObject(TRelation(Like)));
        C_Relation.AddItem('不包含',TObject(TRelation(NotLike)));      end;
    else
      begin
        C_Relation.AddItem('等于',TObject(TRelation(Equal)));
        C_Relation.AddItem('不等于',TObject(TRelation(NotEqual)));
        C_Relation.AddItem('小于',TObject(TRelation(Less)));
        C_Relation.AddItem('小于等于',TObject(TRelation(LessEqual)));
        C_Relation.AddItem('大于',TObject(TRelation(Greater)));
        C_Relation.AddItem('大于等于',TObject(TRelation(GreaterEqual)));      end;
  end;  case AField.DataType of
    ftDate, ftTime, ftDateTime:
    begin
      D_Value.Visible := True;
      E_Value.Visible := False;
    end
    else
    begin
      D_Value.Visible := False;
      E_Value.Visible := True;
    end;
  end;
  if C_Relation.Items.Count > 0 then
    C_Relation.ItemIndex := 0;
end;

解决方案 »

  1.   

    TObject(TRelation(Equal)),转换为Object类型,因为additem需要object类型参数
      

  2.   

    TRelation是什么?假设:
    1、TRelation是对象。那么他这么写很多余,直接这样就完了C_Relation.AddItem('不包含',TRelation(NotLike));
    或者
    C_Relation.AddItem('不包含',TObject(NotLike));2、TRelation是枚举。那么这样写会报错吧,应该这样:C_Relation.AddItem('不包含',TObject(Integer(TRelation(NotLike))));
      

  3.   

    FieldElement := TFieldElement(C_FieldList.Items.Objects[C_FieldList.ItemIndex]);//这句什么意思?
      

  4.   

    一个对象数组,一个强制类型转换,C_FieldList.Items.Objects[]这可以用来存储一个TObject类型的对象,也可以是其他类型,integer类型的都可以,不过当你要使用的时候需要用强制类型转换过来。和ListBox,StringGrid等的Items.Objects是一样的
      

  5.   

    不就是类型转换吗?
    C_FieldList.Items.Objects[C_FieldList.ItemIndex]返回的是TObject类型,FieldElement是TFieldElement
    所以需要将C_FieldList.Items.Objects[C_FieldList.ItemIndex]转换成TFieldElement