線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2181
推到 Plurk!
推到 Facebook!

請問一個關於副程式的問題

答題得分者是:boss.tw
marmot00
一般會員


發表:2
回覆:4
積分:1
註冊:2009-01-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-08 23:56:39 IP:61.59.xxx.xxx 訂閱
FindComponent()這個函式,就想把它加進我的程式內用

但放在Button1Click內時還能使用,放進副程式裡就不能用了

想請教一下我是不是還要再加上些什麼東西才能讓FindComponent()在副程式中執行呢?

對不起這個問題可能非常基本,但我用了所有我想得到的關鍵字搜尋都找不到…

以下是我的程式:

[code cpp]
//---------------------------------------------------------------------------

#include
#pragma hdrstop

#include "Unit1.h"

int Counter[3][9][64];
void Refresh();
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i=1;i<=3;i )
for (int j=1;j<=6;j )
Counter[i][j][1]=j;



}
//---------------------------------------------------------------------------
void Refresh()
{
for (int i=1;i<=3;i )
for (int j=1;j<=6;j )
((TEdit *)FindComponent("C" IntToStr(i) IntToStr(j)))
->Text = Counter[i][j][1];

}

[/code]
------
Axel
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-09 09:30:54 IP:211.72.xxx.xxx 訂閱
int Counter[3][9][64]; // 三維陣列, 各維各有 3,9,64 個元素, 各 Index 為 0~2,0~8,0~63.
您發現 for 迴圈超出 Index 範圍了嗎?

void Refresh(); // 此種宣告, 表示它不是 TForm1 的成員.
void __fastcall TForm1::Refresh(); // 此種宣告, 表示它是 TForm1 的成員.
又, Refresh 為 TQuery 等元件之 Method, 為避免看程式的人發生混淆,
建議改名為: EditRefresh() 較妥當.

因 Refresh() 不是 TForm1 的成員, 則 FindComponent() 要找那個 Form 的?
若改為 Refresh(TForm *FormActive) 便可知到要找那個 Form 上的 Component.
((TEdit *)(FormActive->FindComponent)("C" IntToStr(i) IntToStr(j)))
->Text = Counter[i][j][1];

或將 Refresh() 改為 TForm1 的成員的方式, 便免傳 FormActive.
marmot00
一般會員


發表:2
回覆:4
積分:1
註冊:2009-01-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-10 12:10:21 IP:61.59.xxx.xxx 訂閱
先謝謝您的回覆,

但如果我用void __fastcall TForm1::Refresh(); 宣告,
會顯示訊息: __fastcall TForm1::Refresh() is not a member of 'TForm1'

用您提供的第二個方式的話程式可以執行,但無法呼叫函式,
我設 Breakpoint看發現執行到 Refresh(); 的時候直接跳過去了
我想是不是我的用法錯誤,少了些什麼呢?
------
Axel
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-01-10 14:47:36 IP:122.116.xxx.xxx 訂閱
我試了可以,應該是你的名字 Refresh 跟 Form1->Refresh(); 一樣吧
請看以下code
[code cpp]
int Counter[3][9][64];
void eRefresh(TForm *FormActive);

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Refresh(); //注意這function名字
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i=1;i<=3;i )
for (int j=1;j<=6;j )
Counter[i][j][1]=j;

}
//---------------------------------------------------------------------------
void eRefresh(TForm *FormActive)
{
for (int i=1;i<=3;i )
for (int j=1;j<=6;j )
((TEdit *)(FormActive->FindComponent)("C" IntToStr(i) IntToStr(j)))->Text = Counter[i][j][1];

}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
eRefresh(Form1);
}
//---------------------------------------------------------------------------
[/code]

===================引 用 marmot00 文 章===================
先謝謝您的回覆,

但如果我用void __fastcall TForm1::Refresh(); 宣告,
會顯示訊息: __fastcall TForm1::Refresh() is not a member of 'TForm1'

用您提供的第二個方式的話程式可以執行,但無法呼叫函式,
我設 Breakpoint看發現執行到 Refresh(); 的時候直接跳過去了
我想是不是我的用法錯誤,少了些什麼呢?
marmot00
一般會員


發表:2
回覆:4
積分:1
註冊:2009-01-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-01-10 15:05:56 IP:61.59.xxx.xxx 訂閱
謝謝!改名後再加上呼叫時括號內的Form1就能正常使用了

我之前照 herbert2大的建議將refresh改名但還是不能正常動作就一直用refresh這個名稱

方便的話,可以順便請教一下在括號內加入Form1的原理?


另外大家很在意積分嗎?想按結案卻不曉得該把積分按在哪才好…

------
Axel
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-01-10 15:49:55 IP:211.72.xxx.xxx 訂閱
void __fastcall TForm1::XXXX(...) 必須在 Form1.h 檔之 private 段做宣告,
宣告時不要加『TForm1::』。

括號內加入Form1的原理: 指定要找那一個 Form 的 Component。
因為, FindComponent() 是 TForm 的 Method, 且只找該 Form 上的 Component;
它不是這個 Form1.cpp 的 Method, 故要傳參數給該函式.

另外大家很在意積分嗎?
若真的在意積分, 就不會常來此答題了!
您覺得誰幫您最大的忙, 就給誰! 結案只是表示對答題人及自己的尊重!
marmot00
一般會員


發表:2
回覆:4
積分:1
註冊:2009-01-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-01-10 20:33:24 IP:61.59.xxx.xxx 訂閱
剛剛程式順利完成了,謝謝各位的幫忙!
------
Axel
系統時間:2024-04-27 6:32:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!