procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case form1.ComboBox1.Text of
  'n1':form1.Edit1.Text:='t1';
  'n2':form1.Edit1.Text:='t2';
  'n3':form1.Edit1.Text:='t3';
  'n4':form1.Edit1.Text:='t4';
  end;
end;
出现了错误!我想实现当COMBOBOX的TEXT为N1,N2,N3,N4时,EIDT里出现不同内容,
怎样修改??????

解决方案 »

  1.   

    字符串不能为case的判断条件
    可以
    case Form1.ComboBox1.ItemIndex of
     0:
       ...
     1:
      ...
    end;
      

  2.   

    case 语句的选择因子必须是有序类型。用非有序的类型如字符串做选择因子是不允许的。
      

  3.   

    有让case判断字符串的文章,去找以下
      

  4.   

    不能用字符串作Case Of判断
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      case form1.ComboBox1.ItemIndes of
        0:form1.Edit1.Text:='t1';//'n1'
        1:form1.Edit1.Text:='t2';//'n2'
        2:form1.Edit1.Text:='t3';//'n3'
        3:form1.Edit1.Text:='t4';//'n4'
      end;
    end;
      

  5.   

    当然也可以用一个哈希函数来作如下:
    function MyHarsh(S:String):Integer;
    var
      i:Integer;
    begin
      Result:=0;
      for i:=Length(S) DownTo 1 do
        Result:=Result+Ord(S[i]);  
    end;
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      case form1.ComboBox1.Text of
        MyHarsh('n1'):form1.Edit1.Text:='t1';
        MyHarsh('n2'):form1.Edit1.Text:='t2';
        MyHarsh('n3'):form1.Edit1.Text:='t3';
        MyHarsh('n4'):form1.Edit1.Text:='t4';
      end;
    end;
    注意这个哈希函数重复的可能性很大。不过在数据不多的情况下,应该没有问题
      

  6.   

    以上的答案有点不对,应该如下:
    function MyHarsh(S:String):Integer;
    var
      i:Integer;
    begin
      Result:=0;
      for i:=Length(S) DownTo 1 do
        Result:=Result+Ord(S[i])*(Length(S)-i+1)*10;  
    end;
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      case MyHarsh(form1.ComboBox1.Text) of//改一下!
        MyHarsh('n1'):form1.Edit1.Text:='t1';
        MyHarsh('n2'):form1.Edit1.Text:='t2';
        MyHarsh('n3'):form1.Edit1.Text:='t3';
        MyHarsh('n4'):form1.Edit1.Text:='t4';
      end;
    end;
    当然,你还可以改变MyHarsh这个函数,来改进一下,以减少重复可能性