procedure TForm1.Button1Click(Sender: TObject);
var
 s1,s2:string;
begin
    RichEdit1.clear;
    s1:=RicheEdit1.Text;
    s2:=RichEdit2.Text;
    if s1[1]=s[2] then 
end;
程序运行的时候(在if 那行)会出现异常,这个问题怎么解决?

解决方案 »

  1.   

    var
     s1,s2:string;
    begin
        RichEdit1.clear;   //去掉这句话
        s1:=RichEdit1.Text;
        s2:=RichEdit2.Text;
        if s1[1]=s[2] then 
    end;
    你清空了richedit1以后,s1实际为空了,后面又访问s1的第一个元素,当然不可以了。
      

  2.   

    但是我必须得把RichEdit清空,你有什么办法把它清空而不用RichEdit.clear的吗?
      

  3.   

    还有怎么判断当前SelStarat在哪一行?
      

  4.   

    必须把RichEdit清空,那你if s1[1]=s[2] then 是什么意思呢?
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     s1,s2:string;
    begin
        //.清空richedit1内容
        RichEdit1.clear;     //.赋值
        s1:=RichEdit1.Text;
        s2:=RichEdit2.Text;    //.比较第一位字符串,你以前写的s[2]是错误的,没有申明该变量
        if s1[1]=s2[1] then ...end;
      

  6.   

    我先把RichEdit1.clear,然后等待用户在RichEdit1输入,RichEdit2内容不变,然后再比较RichEdit1刚输入的内容和RichEdit2的内容是否一样。全部在RichEdit1.OnChanged上实现。
    还有请问这位高手,怎么判断SelStart在RichEdit的哪一行???
      

  7.   

    其实你的if比较应该有些问题的,因为当前的s1是空值,所以s1[1]是null或者'',所以if永远不成立.如果你是判断richedit2是否为空,也不用这么写,因而百思不得其解。望解释一下
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     s1,s2:string;
    begin
        //.清空richedit1内容
        RichEdit1.clear; 
     
        //.richedit1取得焦点,然后再等待触发OnChange事件
        RichEdit1.SetFocus;
    end;procedure TForm1.RichEdit1OnChange(Sender: TObject);
    var
     I:Integer;
    begin
        s1:=RichEdit1.Text;
        s2:=RichEdit2.Text    For I:=0 to Length(s1)-1 do
        begin
              
            If s1[I]<>s2[I] then
            begin
                
                ......//错误事件处理
                Break;        end;    end;
    end;
      

  9.   

    不好意思,把s2[1]写成了s[2],我的目的是RichEdit2的内容不变,在RichEdit1的OnChanged的事件里面跟踪RichEdit1的内容。原来的代码是这样的。
    var
     s1,s2:string;
     i:Integer;
    begin
        s1:=RichEdit1.Text;
        s2:=RichEdit2.Text;
        i:=RichEdit1.SelStart;
        if s1[i]=s2[i] then 
          begin
            //变成蓝色
          end
        else
          begin
            //变成红色
          end;end;
      

  10.   

    在按开始键的时候把RichEdit1.clear
      

  11.   

    If s1[I]<>s2[I] then
            begin
                
                ......//错误事件处理
                 //要是我这里出现的不是错误事件了??应该怎么办?请高手写详细一点行吗?
                Break;
            end;
      

  12.   

    字符串可以这样比较吗?
    COmparetext;
      

  13.   

    我个人认为: sanoul(垃圾) 的回复已经说得很清楚了,而且他的方法也不错
      

  14.   

    s1:=RicheEdit1.Text;
    s2:=RichEdit2.Text;
    //目前应当显示s2    if s1[1]=s[2] then //哪里来的s[2]