新手請問for循環問題,謝謝! |
尚未結案
|
zxy666666
中階會員 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
各位大大好! 如下圖:有六組RadioGroup,若我選擇第一,三,四,六組為1.0mm
那麼點擊Button按鈕時,需顯示的結果為選擇的組別分別為1,3,4,6.
但是我現在做的只能顯示錯誤為0,1,2,3
請問該怎麼做呢? 不好意思,新手上路,還請大家能夠支持與幫助,感激不盡!!! 代碼如下:
< class="code">
procedure TForm1.Button1Click(Sender: TObject);
var
i,iTesttot: Integer ;
begin
iTestTot := 0 ;
if RadioGroup1.ItemIndex <> 0 then
begin
iTestTot := iTestTot + 1 ;
end;
if RadioGroup2.ItemIndex <> 0 then
begin
iTestTot := iTestTot + 1 ;
end;
if RadioGroup3.ItemIndex <> 0 then
begin
iTestTot := iTestTot + 1 ;
end;
if RadioGroup4.ItemIndex <> 0 then
begin
iTestTot := iTestTot + 1 ;
end; if RadioGroup5.ItemIndex <> 0 then
begin
iTestTot := iTestTot + 1 ;
end; if RadioGroup6.ItemIndex <> 0 then
begin
iTestTot := iTestTot + 1 ;
end;
Memo1.Lines.Clear; if iTestTot > 0 then
begin
for I := 0 to iTestTot - 1 do
Memo1.Lines.Add(inttostr(i)) ;
end;
end;
|
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
引言: 代碼如下:妳的想法有些不太對勁哩~ 照妳的程式碼看來,變成是在紀錄有幾個 1.0mm 被選中了, 這跟 for 無關阿~ 若照妳的需求,程式碼直接改成這樣就好啦procedure TForm1.Button1Click(Sender: TObject); var i,iTesttot: Integer ; begin iTestTot := 0 ; if RadioGroup1.ItemIndex <> 0 then begin iTestTot := iTestTot 1 ; end; if RadioGroup2.ItemIndex <> 0 then begin iTestTot := iTestTot 1 ; end; if RadioGroup3.ItemIndex <> 0 then begin iTestTot := iTestTot 1 ; end; if RadioGroup4.ItemIndex <> 0 then begin iTestTot := iTestTot 1 ; end; if RadioGroup5.ItemIndex <> 0 then begin iTestTot := iTestTot 1 ; end; if RadioGroup6.ItemIndex <> 0 then begin iTestTot := iTestTot 1 ; end; Memo1.Lines.Clear; if iTestTot > 0 then begin for I := 0 to iTestTot - 1 do Memo1.Lines.Add(inttostr(i)) ; end; end; procedure TForm1.Button1Click(Sender: TObject); begin iTestTot := 0 ; if RadioGroup1.ItemIndex <> 0 then begin Memo1.Lines.Add('1') ; end; if RadioGroup2.ItemIndex <> 0 then begin Memo1.Lines.Add('2') ; end; if RadioGroup3.ItemIndex <> 0 then begin Memo1.Lines.Add('3') ; end; if RadioGroup4.ItemIndex <> 0 then begin Memo1.Lines.Add('4') ; end; if RadioGroup5.ItemIndex <> 0 then begin Memo1.Lines.Add('5') ; end; if RadioGroup6.ItemIndex <> 0 then begin Memo1.Lines.Add('6') ; end; end;-- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
zxy666666你好:
我有一點搞不懂妳要的是什麼...
就你的程式碼來看,你的做法是勾了幾個(n)
memo中就會show, 0~n-1,不會是你說的那個
樣子,我大概猜了一下你的意思,看看合不合
用
procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; RG: TRadioGroup; begin Memo1.Lines.Clear; for i:=0 to Self.ComponentCount-1 do begin if Self.Components[i] is TRadioGroup then begin RG:= TRadioGroup(Self.Components[i]); if RG.ItemIndex <> 0 then Memo1.Lines.Add(RG.Caption); end; end; end; |
zxy666666
中階會員 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
hi,chtai大大你好!謝謝你的回答.按我上面的要求,確實你那樣做就可以了。
(其實還不止那樣啦...) TO:
jimmy_wei大大
procedure TForm1.Button1Click(Sender: TObject); var i,iTest: Integer; RG: TRadioGroup; begin itest := 0 ; Memo1.Lines.Clear; for i:=0 to Self.ComponentCount-1 do begin if Self.Components[i] is TRadioGroup then if Self.Components[i].Tag = 1 then //因為Form上還有不需要計算的RadioGroup的Tag都預設為0,所以需要算在裡面的Tag值我統一設為1 begin RG:= TRadioGroup(Self.Components[i]); if RG.ItemIndex <> 0 then iTest := iTest 1; //先合計有幾個被選擇1.0mm end; end; //謝謝,以上方法真好:假如我不止6組,若有10組20組的這樣合計就方便多了(呵呵,我以前的算法真是笨笨~~) // > >> |
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
插花一下原始程式的邏輯^^Y,我是來搞怪的 程式顯示 0 1 2 3 是很正常的事情
解說
你總共點了4組所以iTestTot內容為4
if iTestTot > 0 then //iTestTot大於0運行 目前是4所以會繼續執行下面程式
begin
for I := 0 to iTestTot - 1 do //I=0 iTestTot = 3
Memo1.Lines.Add(inttostr(i)) ; //列印出I值,I變化0~3故顯示0 1 2 3
end; 看出來了嗎?你想要的功能應該是希望回傳第幾組被選取的值吧!!
解決方式有上面大大的方法,我只好灌灌水CC,說說邏輯 數學 程式 經驗=不懂^^
|
zxy666666
中階會員 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
引言: 插花一下原始程式的邏輯^^Y,我是來搞怪的 程式顯示 0 1 2 3 是很正常的事情 解說 你總共點了4組所以iTestTot內容為4 if iTestTot > 0 then //iTestTot大於0運行 目前是4所以會繼續執行下面程式 begin for I := 0 to iTestTot - 1 do //I=0 iTestTot = 3 Memo1.Lines.Add(inttostr(i)) ; //列印出I值,I變化0~3故顯示0 1 2 3 end; 看出來了嗎?你想要的功能應該是希望回傳第幾組被選取的值吧!! 解決方式有上面大大的方法,我只好灌灌水CC,說說邏輯 數學 程式 經驗=不懂^^非常感謝juneo大大的指教! 你說的對,我想要的功能就是希望能回傳第幾組被選取的值(數字). 一定要給出一個變數,因為我在 |
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
如果你一定要用迴圈的話提供你以下的方法 1.開一個陣列
2.設定每一個RadioGroup的taborder依順序來設定
3.就寫程式囉
我想這樣可以達成你的需求,只是我真的覺得你可以
好好的重新分析你的問題,我不認為這是好的程式邏
輯.....提供你做參考
procedure TForm1.Button1Click(Sender: TObject); var i, iTag: Integer; RG: TRadioGroup; ArrayCheck: Array of Integer; begin SetLength(ArrayCheck, 10); iTag:=0; Memo1.Lines.Clear; for i:=0 to Self.ComponentCount-1 do begin if Self.Components[i] is TRadioGroup then begin RG:= TRadioGroup(Self.Components[i]); if RG.ItemIndex <> 0 then begin Memo1.Lines.Add(RG.Caption); ArrayCheck[iTag]:= RG.TabOrder 1; iTag:= iTag 1; end; end; end; for i:=0 to 6 do Memo1.Lines.Add(IntToStr(ArrayCheck[i])); end; |
zxy666666
中階會員 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |