StringGrid動態使用時,會出現找不到元件的錯誤!! |
尚未結案
|
tahoo
一般會員 發表:22 回覆:19 積分:8 註冊:2003-05-13 發送簡訊給我 |
請問一下,我使用了8個StringGrid的原件StringGrid1~8,但我想要用迴圈的方式將所得到的值寫入這8個StringGrid裡面,可是一直會出現錯誤,不知什麼原因,請各位大大幫我看看,感激!! for i:=0 to 8 do
begin
TStringGrid(FindComponent('StringGrid' inttoStr(i))).Cells[i, 0] := adoQuery.Fieldbyname('IDno').AsString;
end; 突然想學Delphi的新手 發表人 - tahoo 於 2004/12/24 14:39:43
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
//StringGrid1~8 procedure TForm1.Button2Click(Sender: TObject); var I: Integer; P: TStringGrid; begin for I := 0 to 7 do begin P := TStringGrid(FindComponent('StringGrid' IntToStr(I 1))); if Assigned(P) then P.Cells[I, 0] := adoQuery.Fieldbyname('IDno').AsString; end; end; |
kenspc
一般會員 發表:1 回覆:20 積分:4 註冊:2004-12-09 發送簡訊給我 |
|
tahoo
一般會員 發表:22 回覆:19 積分:8 註冊:2003-05-13 發送簡訊給我 |
引言:突然想學Delphi的新手for i:=1 to 8 do begin TStringGrid(FindComponent('StringGrid' + inttoStr(i))).Cells[i, 0] := adoQuery.Fieldbyname('IDno').AsString; end;這樣寫才正確吧. 不好意思,還是不行,如果不用物件陣列的方式,就是可以直接顯示資料到Cell中,只要一加上 TStringGrid(FindComponent('StringGrid' + inttoStr(i))).Cells[i, 0] 就會顯示出下面的訊息,實在看不懂訊息在寫什麼,希望有人能幫我,謝謝!! |
tahoo
一般會員 發表:22 回覆:19 積分:8 註冊:2003-05-13 發送簡訊給我 |
引言:謝謝您的回答,但是還是不行,程式無法進入到 P.Cells[I, 0] := adoQuery.Fieldbyname('IDno').AsString; 是否系統未分配給TstringGrid,才導致無法進入指定的判斷式(上一行)內呢,謝謝!! 突然想學Delphi的新手//StringGrid1~8 procedure TForm1.Button2Click(Sender: TObject); var I: Integer; P: TStringGrid; begin for I := 0 to 7 do begin P := TStringGrid(FindComponent('StringGrid' IntToStr(I 1))); if Assigned(P) then P.Cells[I, 0] := adoQuery.Fieldbyname('IDno').AsString; end; end; |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi tahoo, 未進入可能是因為 1.StringGrid 未建立
2.已建立但是未給名稱 建議如下
1.create StringGrid 後給予名稱
procedure TForm1.Button2Click(Sender: TObject); var i : integer; P: TStringGrid; begin for i := 1 to 7 do begin p := TStringGrid.Create(Self); p.Name := 'StringGrid' inttostr(i); p.Parent := Self; p.FixedCols := 0; p.FixedRows :=0; p.Left := 10; p.Top := (i-1) * 100; end; end;如此即可針對其名稱進行 FindComponent procedure TForm1.Button1Click(Sender: TObject); var I: Integer; P: TStringGrid; begin for I := 1 to 7 do begin P := TStringGrid(FindComponent('StringGrid' IntToStr(I 1))); if Assigned(P) then P.Cells[0, 0] := p.Name; end; end;2.也可以針對所有 StringGrid 進行給值動作(不管其名稱) procedure TForm1.Button3Click(Sender: TObject); var i : integer; P: TStringGrid; begin for i := 0 to self.ControlCount - 1 do begin if Self.Controls[i].ClassNameIs('TStringGrid') then begin TStringGrid(Self.Controls[i]).Cells[0,0] := Self.Controls[i].Name; end; end; end;---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
Fishman大大的方式是正確的做法,
不過建議將Create TStringGrid的
動作移置FormCreate比較適當,因為
產生的元件有設定Name property,
重複Button2Click的動作將導致例外發生. 另外的做法可以直接以Array的方式,
就可以省去後續Search的動作.
TForm1 = class(TForm) procedure FormCreate(Sender: TObject); public G: array of TStringGrid; end; implementation procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin SetLength(G, 8); for I := 0 to Length(G)-1 do with TStringGrid.Create(Self) do begin Parent := Self; FixedCols := 0; FixedRows :=0; Left := 10; Top := I * 100; end; end; 後續直接以 G[] 來存取TStringGrid; |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
更正
procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin SetLength(G, 8); for I := 0 to Length(G)-1 do begin G[I] := TStringGrid.Create(Self); with G[I] do begin Parent := Self; FixedCols := 0; FixedRows :=0; Left := 10; Top := I * 100; end; end; |
tahoo
一般會員 發表:22 回覆:19 積分:8 註冊:2003-05-13 發送簡訊給我 |
引言: 請問一下,我使用了8個StringGrid的原件StringGrid1~8,但我想要用迴圈的方式將所得到的值寫入這8個StringGrid裡面,可是一直會出現錯誤,不知什麼原因,請各位大大幫我看看,感激!! for i:=0 to 8 do begin TStringGrid(FindComponent('StringGrid' inttoStr(i))).Cells[i, 0] := adoQuery.Fieldbyname('IDno').AsString; end; 突然想學Delphi的新手 發表人 - tahoo 於 2004/12/24 14:39:43最後發現可以用這個方式解決問題,謝謝大家囉!! for i:=0 to 8 do begin TStringGrid(Self.FindComponent('StringGrid' inttoStr(i))).Cells[i, 0] := adoQuery.Fieldbyname('IDno').AsString; end; 突然想學Delphi的新手 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |