TStringGridについて

解決


tomo  2003-04-25 00:26:50  No: 3423

昨日に続きまたまた宜しくお願い致します。
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


にしの  2003-04-25 00:56:00  No: 3424

説明には「各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ですよ。

やりたいことを実現するための処理が、きちんとできていないように思えます。
問題を、最小サイズに分割して、それぞれこなしてみましょう。


tomo  2003-04-25 01:38:44  No: 3425

にしのさん、昨日に続き本当にありがとうございました。
まだまだ勉強不足で、正直意味が分かってないのに、書籍等を物真似してコーディングすると、このように何がしたいかが明確に伝わらないような内容になってしまうんですね。
これからも、頑張って勉強を続けますので、今後とも宜しくお願い致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加