昨日に続きまたまた宜しくお願い致します。
StringGrid1(RowCount:=3)の、あるRows(i行目)をダブルクリックして各Cellsに格納されている文字列を取り出し、Edit1.Textに表示させようとしているのですが、下記のコーディングで実行するとRows0からRows3までの各Cellsに格納されている文字列全てがEdit1.Textに表示されてしまいます。
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
i: Integer;
s:string;
begin
s := '';
for i := 1 to StringGrid1.RowCount do begin
if i<> 0 then s := s + ' ';
s := s + StringGrid1.Rows[i].Text;
end;
Edit4.Text := s;
end;
図で表すと・・・
aaa sss ddd
zzz xxx ccc
qqq www eee ←このRowsをダブルクリックした場合
yyy uuu iii
Edit1.Textに qqq www eee を表示させたいです。
どなたか、ご教授下さい。m(_ _)m
説明には「各Cellsに格納されている文字列を取り出し」とかかれているのに、Rowsからとってきていますよね。
それはさておき。
まず、問題を分解して、そのままコードに置き換えられるような設計をなさってみてはどうでしょう。
たとえば、
> StringGrid1(RowCount:=3)の、あるRows(i行目)をダブルクリックして
この時点のi行目というのは、StringGrid1.Rowです。
各Cellsに格納されている文字列を取り出し、Edit1.Textに表示させ
Cellsの指定は、Cells[ACol, ARow]なので、i行目であれば、Cells[j, i]です。
では、jは何かというと、その行の最初のセルから最後のセルまでの位置です。
i := StringGrid1.Row;
s := '';
for j := 0 to StringGrid1.ColCount - 1 do
begin
s := s + ' ' + StringGrid1.Cells[j, i];
end;
これだと、最初に半角スペースが入るので、StringGrid1.ColCountが1より大きいと仮定して
i := StringGrid1.Row;
s := StringGrid1.Cells[0, i];
for j := 1 to StringGrid1.ColCount - 1 do
begin
s := s + ' ' + StringGrid1.Cells[j, i];
end;
とすれば、入ります。
ちなみに、改行区切りでよければ、
s := StringGrid1.Rows[StringGrid1.Row].Text;
でOKですよ。
やりたいことを実現するための処理が、きちんとできていないように思えます。
問題を、最小サイズに分割して、それぞれこなしてみましょう。
にしのさん、昨日に続き本当にありがとうございました。
まだまだ勉強不足で、正直意味が分かってないのに、書籍等を物真似してコーディングすると、このように何がしたいかが明確に伝わらないような内容になってしまうんですね。
これからも、頑張って勉強を続けますので、今後とも宜しくお願い致します。
ツイート | ![]() |