はじめまして、プログラミングを始めて1週間の超初心者ですが
よろしくお願い致します。
Formに、StringGrid1、ListBox1、Button1を配置し、
Button1をクリックするとListBox1.ItemsをStringGrid1のRowに
表示させる、ということをしたいのですが、
ListBox1.Itemsの1行を、先頭から1〜5文字目までをCells[0,i+1]に
6〜10文字目までをCells[1,i+1]に、というように1行を分割して
表示させることが出来ません。
下記は一応私が書いてみたコードです。
どのようにしたらいいかご指導下さい。
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
StringGrid1.RowCount:=ListBox1.Count+1;
StringGrid1.Visible:=False;
for i:=0 to ListBox1.Count-1 do
begin
StringGrid1.Cells[0,i+1]:=ListBox1.Items.Strings[i];
end;
StringGrid1.Visible:=True;
end;
まず、TListBoxコンポーネントにCountプロパティは存在しません。Itemsプロパティの、Countプロパティを利用します。
やりたいことは理解されているようですね。ただ、コーディングにそれが反映されていません。
今あるコーディングでは、
> StringGrid1.Cells[0,i+1]:=ListBox1.Items.Strings[i];
・リストボックスの各要素を、グリッドのセル(0,i)に入れる
だけです。
これを、
・リストボックスの各要素の「1文字目から5文字」を、グリッドのセル(0,i+1)に入れる。
・リストボックスの各要素の「6文字目から5文字」を、グリッドのセル(1,i+1)に入れる。
とします。
文字列の一部分を抜き出すには、Copy関数を使用します。Delphiの場合、文字列を文字配列と見立てたときの最初の要素は「1」です。なので、1文字目から5文字は、「Copy(文字列, 1, 5)」となります。
StringGrid1.Visibleを変更しているのは、たぶん描画速度アップのためのおまじないだと思いますが、結構長い処理を行うと、その部分が消えてしまい見栄えはよろしくないですよね。
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=18#0190.txt
ここが参考になると思います。
にしのさんご指導有難う御座いました。
早速、試してみたのですが
StringGrid1.Cells[0,i+1]:=copy(s,1,3);
とすると、先頭から3文字目までを表示するのですが
4〜5文字目までをCol=1、Row=i+1に表示させようと
StringGrid1.Cells[1,i+1]:=copy(s,4,5);とすると
「リストのインデックスが範囲を超えています」
とエラーになります。
なにが問題なのか教えてください。
お願い致します。
ColCountは、RowCountのように初期設定してありますか?
ツイート | ![]() |