修改ColWidths[i]的值,来指定某列的宽度。
在TEdit的onchange事件中制定StringGrid1.Cells[i,j]:=Edit1.Text;

解决方案 »

  1.   

    在TEdit的onchange事件中制定StringGrid1.Cells[i,j]:=Edit1.Text  ==〉 试了,不行,一旦StringGrid1的焦点转移到其他Cell上时,原先的值就消失了,现在该怎么办?还有反过来让TEdit的值随着StringGrid1.Cells[i,j]的值发生变化,又该怎么做?
      

  2.   

    你是想怎么样,如果每个cell对应一个TEdit时绝对没有问题的。
    你应该是想焦点在哪个Cell上就把Edit和那个Cell连接吧。在TStringGrid的MouseDown事件进行处理,判断当前点击的事哪一个cell,定义一个变量用来记录当前的焦点cell,指定当前Edit连接的位置,然后在Edit的OnChange时间里指连接该Edit的位置。
      

  3.   

    我是说StringGrid1.Cells[i,j]:=Edit1.Text  确实可以改变StringGrid1.Cells[i,j]的值,但是无法保存,当当前的StringGrid1.Cells[i,j]失去焦点时它的值会再次被清空,不知是怎么回事
      

  4.   

    是你在Edit的OnChange里设置成了其他的值。给你一段代码,应该可以解决你的问题。
    var
        Column,Row:integer;
        bChanged:boolean;
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
        StringGrid1.Cells[Column,Row]:=Edit1.Text;
    end;procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
      ARow: Integer; const Value: String);
    begin
        if bChanged=false then
            Edit1.Text:=StringGrid1.Cells[ACol,ARow];
    end;procedure TForm1.StringGrid1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
        bChanged:=true;
        StringGrid1.MouseToCell(X, Y, Column, Row);
        Edit1.Text:=StringGrid1.Cells[Column,Row];
        bChanged:=false;
    end;
      

  5.   

    在onmousedown事件里设置一下,判断当前列是否是指定的列,如果是,将Edit的ReadOnly设置为true,若不是,将Edit的ReadOnly设置为false即可。