我要在一个edit里输入字符,edit的长度会随字符长度增加而增加,但当我删除字符时,edit的长度依然增加。
请大家帮忙看看怎么回事。procedure TForm1.Edit1Change(Sender: TObject);
begin
  len:= length(edit1.text);
  if edit1.Width < 83 then
     edit1.Width:=83
  else
    edit1.Width :=edit1.Width+len;
end;

解决方案 »

  1.   


    只帮你解决删除依然增加的问题:var
      Len: integer;procedure TForm1.Edit1Change(Sender: TObject);
    var
      X : integer;
    begin
      X := 0;
      if Length(Edit1.Text) - Len > 0 then X := 1;
      if Length(Edit1.Text) - Len < 0 then X := -1;
      Len := Length(Edit1.Text);
      if Edit1.Width < 83 then
        Edit1.Width := 83
      else
        Edit1.Width := Edit1.Width + X*Len;
    end;{具体增加、减少的幅度,我无法知道你的目的,因此没改动。}{如果不想用全局变量Len,可以用Edit1.Tag代替}
      

  2.   

    代码改为如下,试一下
    procedure TForm1.Edit1Change(Sender: TObject); 
    begin 
      len:= length(edit1.text); 
      if edit1.Width  < 83 then 
         edit1.Width:=83 
      else 
        edit1.Width := 83 + len; 
    end; 原来的代码,
    只要编辑文本框就会执行TForm1.Edit1Change函数,最后都会执行:edit1.Width :=edit1.Width+len; 
    只要len>1,都将变大文本框长度。
      

  3.   

    不知道楼主要的是不是下面的这种效果:procedure TForm1.Edit1Change(Sender: TObject);
    var
      ALabel: TLabel;
    begin
      ALabel := TLabel.Create(Self);
      try
        ALabel.AutoSize := True;
        ALabel.Font := TEdit(Sender).Font;
        ALabel.Caption := TEdit(Sender).Text;
        TEdit(Sender).Width := ALabel.Width + 12;
      finally
        ALabel.Free;
      end;
    end;
      

  4.   

    楼上的几位大侠的做法,我觉得很牵强,
    Length(S)表示的的是字符的长度,而控件的尺寸是用象素来确定的,两者怎么混起来了??
    所以我认为正确的做法应该如下:
    procedure TForm1.Edit1Change(Sender: TObject); 
    begin 
      //edit1.Width为内容所需长度再留前后两个象素的宽度
      edit1.Width := Canvas.TextWidth(edit1.Text)+4  
    end;