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

請問MDI表單裡要如何宣告全域變數讓所有Child都能使用?

答題得分者是:2007
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-06 22:10:23 IP:203.70.xxx.xxx 訂閱
在Main.h 裡的Public 宣告變數var1
可是在ChildForm裡好像還是不認識該變數耶...

應該怎麼宣告, 或是怎麼讓變數在各個ChildForm裡互通呢?
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-06 22:27:47 IP:220.141.xxx.xxx 訂閱
1. 在Form1上放一個Richedit1元件(用Edit元件也可)
2. MdiChildForm內放一個Memo1
3. memo1.Text := TRichedit(application.MainForm.FindComponent('Richedit1')).Text;
之前在站上看到前輩回文中看到的,我拿來試,還不錯用說。
我的案例是用 Delphi 寫MdiForm MdiChildForm(包在Dll中用動態載入)。
------
努力會更接近成功
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-07 06:59:34 IP:211.72.xxx.xxx 訂閱
還一個方法, 於 MainForm new 一個 Private 的 TStrings, 位址存至 TScreen->Tag,
MainForm 可用, 各 ChildForm 也都可取的該位址轉型回 TStrings, 取用其中資料,
或當成全域資料做控制.
2007
中階會員


發表:54
回覆:90
積分:98
註冊:2008-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-07 09:02:06 IP:220.132.xxx.xxx 未訂閱
拉一個 Unit     (File--->New--->Unit)

Unit.cpp
int test = 0; //宣告變數

Unit.h
extern int test; //extern 變數

每個 ChildForm 在 include 這個 Unit ,應該就可以吧!!!

但我不知這是不是正確的方法,是不是有不好的地方??
===================引 用 leochen1204 文 章===================
在Main.h 裡的Public 宣告變數var1
可是在ChildForm裡好像還是不認識該變數耶...

應該怎麼宣告, 或是怎麼讓變數在各個ChildForm裡互通呢?
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-07 12:04:02 IP:203.71.xxx.xxx 訂閱
這樣似乎不行耶
Edit1->Text = TEdit(application->Main->FindComponent('Edit2'))->Text;

===================引 用 pceyes 文 章===================
1. 在Form1上放一個Richedit1元件(用Edit元件也可)
2. MdiChildForm內放一個Memo1
3. memo1.Text := TRichedit(application.MainForm.FindComponent('Richedit1')).Text;
之前在站上看到前輩回文中看到的,我拿來試,還不錯用說。
我的案例是用 Delphi 寫MdiForm MdiChildForm(包在Dll中用動態載入)。
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-07 12:26:48 IP:203.71.xxx.xxx 訂閱
這樣成功了!
我在MainForm.cpp 裡宣告這些int變數.
接著在MainForm.h裡將這些變數宣告成extern int
然後在ChildForm.cpp裡include "MainForm.h"
這樣就可以存取這些變數了~


這跟全域變數的意思一樣嗎??

===================引 用 2007 文 章===================
拉一個 Unit (File--->New--->Unit)

Unit.cpp
int test = 0; //宣告變數

Unit.h
extern int test; //extern 變數

每個 ChildForm 在 include 這個 Unit ,應該就可以吧!!!

但我不知這是不是正確的方法,是不是有不好的地方??
===================引 用 leochen1204 文 章===================
在Main.h 裡的Public 宣告變數var1
可是在ChildForm裡好像還是不認識該變數耶...

應該怎麼宣告, 或是怎麼讓變數在各個ChildForm裡互通呢?
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-07 13:41:16 IP:211.72.xxx.xxx 訂閱
可以, 但若往後每次需加一個變數, 就多一個變數位址.
用 TStrings 則永遠只有一個位址, 且 TStrings->Strings[i] = "Name=Value"; 的方式, 會較有彈性.
Name 類似變數名稱, Value 為其值, 隨時可轉 int 或 double 使用.

===================引 用 leochen1204 文 章===================
這樣成功了!
我在MainForm.cpp 裡宣告這些int變數.
接著在MainForm.h裡將這些變數宣告成extern int
然後在ChildForm.cpp裡include "MainForm.h"
這樣就可以存取這些變數了~

這跟全域變數的意思一樣嗎??
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-08 07:04:07 IP:59.115.xxx.xxx 訂閱
這樣的寫法就是全域變數的意思。有好有壞…

好的不用講,就是容易取得。壞的部份… 請注意變數名的取法,最好能使用比較唯一性的,不然可能會不經意的使用到它。

所以建議可以取名為gTEST,這樣會比test好多了。因為當你程式愈寫愈多時可能會忘了你曾有一個全域的叫test,進而重複的使用到同樣的名字而導致錯誤!

補充一下,當你create一個form時,就會有一個叫Form1的變數,它就是全域的變數!


===================引 用 leochen1204 文 章===================所以

這跟全域變數的意思一樣嗎??

===================引 用 2007 文 章===================

但我不知這是不是正確的方法,是不是有不好的地方??

------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2008-11-08 07:05:25, 註解 無‧
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-11-08 11:36:22 IP:140.113.xxx.xxx 訂閱
那請問一下, 如果不是用create出來的form呢?
因為我要存取變數的兩個form是MDI裡面我想要設定一些property的設定視窗.
這兩個form是在專案中一開始就Add進來的.
我試著要打開設定視窗時讓property視窗對齊到MainForm的最右邊...(試過Docking... 不成功...)
在MainForm的 MainForm->Width - Property->Width;
不知道正確的指令下法... sorry

===================引 用 aftcast 文 章===================
這樣的寫法就是全域變數的意思。有好有壞…

好的不用講,就是容易取得。壞的部份… 請注意變數名的取法,最好能使用比較唯一性的,不然可能會不經意的使用到它。

所以建議可以取名為gTEST,這樣會比test好多了。因為當你程式愈寫愈多時可能會忘了你曾有一個全域的叫test,進而重複的使用到同樣的名字而導致錯誤!

補充一下,當你create一個form時,就會有一個叫Form1的變數,它就是全域的變數!



系統時間:2017-11-19 18:30:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!