| 導購 | 订阅 | 在线投稿
分享
 
 
 

C++Builder從窗體獲取數據

來源:互聯網  2008-06-01 01:55:20  評論

大多數實際的應用程序由多個窗體組成。信息經常需要在窗體之間傳遞。將信息傳遞給窗體,可借助傳遞給窗體的參數,或通過設置窗體的屬性。獲得消息的方式依靠于窗體模態的還是非模態的。

1.從非模態窗體獲取數據

通過調用公共成員函數或查詢窗體的屬性,可以很輕易地從非模態的窗體中抽取信息。例如,假定應用程序包含一個非模態的窗體調用ColorForm,其中包含一個列表框ColorListBox。列表框中包括了一個顔色列表(「紅色」、「綠色」、「藍色」等)。每次用戶選擇一種新的顔色,當前被選擇的顔色名字符串自動地存儲在ColorListBox的CurrentColor屬性裏。該窗體類聲明如下:

C++Builder從窗體獲取數據

該列表框的OnClick事件處理程序—ColorListBoxClick,在每次選擇一個新的列表框的項時設置CurrentColor屬性的值。該事件處理程序從包含這種顔色的列表框中得到字符串任命,並將它設爲CurrentColor的值。CurrentColor屬性使用設置函數setColor來將實際屬性值存儲在私有數據成員curColor中:

C++Builder從窗體獲取數據

現在假定應用程序有另一個窗體ResultsForm,在其中的一個按鈕(UpdateButton)被單擊時,需要找到當前在ColorForm中被選擇的顔色。那麽,UpdateButton的OnClick事件處理程序可能會如下所示:

C++Builder從窗體獲取數據

該事件處理程序首先通過檢驗指針是否爲零來證實ColorForm的存在。然後獲取ColorForm的CurrentColor屬性值。CurrentColor查詢調用其獲取函數getColor,如下所示:

C++Builder從窗體獲取數據

作爲選擇,若ColorForm的getColor函數是公共的,另一窗體可以不使用CurrentColor屬性而得到當前顔色(例如,StringsS=ColorForm->getColor();)。實際上,也沒什麽方法可防止另一窗體通過直接檢驗列表框的選擇而得到ColorForm的當前被選定顔色:

C++Builder從窗體獲取數據

然而,使用屬性使ColorForm的接口變得非常簡單。所有需做的事僅是檢查ColorForm的CurrentColor屬性值。

2.從模態的窗體獲取數據

如同非模態的窗體一樣,模態的窗體經常包含其他的窗體需要的信息。最常見的例子是窗體A啓動模態的窗體B。當窗體B關閉時,窗體A需要知道用戶如何處理窗體B以便決定如何繼續處理窗體A。假如窗體B仍然在內存中,可通過屬性或成員函數查詢它,與上例中非模態窗體的方式相同。但若窗體B關閉時從內存中刪除時如何處理呢?因爲窗體沒有顯式返回值,必須在它被刪除前保留重要的信息。

爲舉例說明,將ColorForm窗體改爲模態窗體。類聲明如下:

C++Builder從窗體獲取數據

例中窗體有一包含顔色列表的列表框ColorListBox。當按下SelectButton按鈕時,將列出ColorListBox當前被選擇的顔色名。CancelButton是用于關閉窗體的按鈕。

注重類中加入了一個自定義的構造函數,它使用了一個String*參數。假定啓動ColorForm的窗體知道String*所指的串。那麽構造函數的實現將如下所示:

C++Builder從窗體獲取數據

構造函數將指針保存到私有數據成員curColor中並將字符串初始化爲空字符串。

注重要使用上例的自定義構造函數,窗體必須是顯式創建的。不能是在應用程序開始時自動創建的。細節請參見4.3.1節。

在應用程序中,若用戶從列表框中選擇一種顔色並用SelectButton按鈕來保存選擇並關閉窗體。則SelectButton的OnClick事件處理程序爲:

C++Builder從窗體獲取數據

注重到事件處理程序會將所選擇顔色名存儲到傳遞給構造函數的串的地址中。若要有效地使用ColorForm,調用窗體必須傳遞給構造函數一個存在的串。例如,假定窗體ResultsForm中的按鈕UpdateButton被按下時,ColorForm將被ResultsForm。則事件處理程序爲:

C++Builder從窗體獲取數據

UpdateButtonClick創建一個字符串S。S的地址將傳遞給GetColor函數,GetColor會創建ColorForm,並將指向S的指針作爲參數傳遞給構造函數。ColorForm一關閉它就被刪除,但若用戶選擇了一種顔色,被選擇顔色名仍然被保存在S中。若用戶沒有選擇顔色就關閉了ColorForm,S中將包含一空串。

上例使用一個串變量從模態窗體獲取信息。當然,根據需要可使用更複雜的對象。記住,應該總是提供一種方法讓調用窗體知道是否模態窗體沒有做任何變化或選擇就關閉了(比如提供缺省爲空的字符串S)。

大多數實際的應用程序由多個窗體組成。信息經常需要在窗體之間傳遞。將信息傳遞給窗體,可借助傳遞給窗體的參數,或通過設置窗體的屬性。獲得消息的方式依靠于窗體模態的還是非模態的。 1.從非模態窗體獲取數據 通過調用公共成員函數或查詢窗體的屬性,可以很輕易地從非模態的窗體中抽取信息。例如,假定應用程序包含一個非模態的窗體調用ColorForm,其中包含一個列表框ColorListBox。列表框中包括了一個顔色列表(「紅色」、「綠色」、「藍色」等)。每次用戶選擇一種新的顔色,當前被選擇的顔色名字符串自動地存儲在ColorListBox的CurrentColor屬性裏。該窗體類聲明如下: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425070886.gif[/img][/url] 該列表框的OnClick事件處理程序—ColorListBoxClick,在每次選擇一個新的列表框的項時設置CurrentColor屬性的值。該事件處理程序從包含這種顔色的列表框中得到字符串任命,並將它設爲CurrentColor的值。CurrentColor屬性使用設置函數setColor來將實際屬性值存儲在私有數據成員curColor中: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425070971.gif[/img][/url] 現在假定應用程序有另一個窗體ResultsForm,在其中的一個按鈕(UpdateButton)被單擊時,需要找到當前在ColorForm中被選擇的顔色。那麽,UpdateButton的OnClick事件處理程序可能會如下所示: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425071021.gif[/img][/url] 該事件處理程序首先通過檢驗指針是否爲零來證實ColorForm的存在。然後獲取ColorForm的CurrentColor屬性值。CurrentColor查詢調用其獲取函數getColor,如下所示: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425071061.gif[/img][/url] 作爲選擇,若ColorForm的getColor函數是公共的,另一窗體可以不使用CurrentColor屬性而得到當前顔色(例如,StringsS=ColorForm->getColor();)。實際上,也沒什麽方法可防止另一窗體通過直接檢驗列表框的選擇而得到ColorForm的當前被選定顔色: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425071119.gif[/img][/url] 然而,使用屬性使ColorForm的接口變得非常簡單。所有需做的事僅是檢查ColorForm的CurrentColor屬性值。 2.從模態的窗體獲取數據 如同非模態的窗體一樣,模態的窗體經常包含其他的窗體需要的信息。最常見的例子是窗體A啓動模態的窗體B。當窗體B關閉時,窗體A需要知道用戶如何處理窗體B以便決定如何繼續處理窗體A。假如窗體B仍然在內存中,可通過屬性或成員函數查詢它,與上例中非模態窗體的方式相同。但若窗體B關閉時從內存中刪除時如何處理呢?因爲窗體沒有顯式返回值,必須在它被刪除前保留重要的信息。 爲舉例說明,將ColorForm窗體改爲模態窗體。類聲明如下: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425071147.gif[/img][/url] 例中窗體有一包含顔色列表的列表框ColorListBox。當按下SelectButton按鈕時,將列出ColorListBox當前被選擇的顔色名。CancelButton是用于關閉窗體的按鈕。 注重類中加入了一個自定義的構造函數,它使用了一個String*參數。假定啓動ColorForm的窗體知道String*所指的串。那麽構造函數的實現將如下所示: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425071247.gif[/img][/url] 構造函數將指針保存到私有數據成員curColor中並將字符串初始化爲空字符串。 注重要使用上例的自定義構造函數,窗體必須是顯式創建的。不能是在應用程序開始時自動創建的。細節請參見4.3.1節。 在應用程序中,若用戶從列表框中選擇一種顔色並用SelectButton按鈕來保存選擇並關閉窗體。則SelectButton的OnClick事件處理程序爲: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425071281.gif[/img][/url] 注重到事件處理程序會將所選擇顔色名存儲到傳遞給構造函數的串的地址中。若要有效地使用ColorForm,調用窗體必須傳遞給構造函數一個存在的串。例如,假定窗體ResultsForm中的按鈕UpdateButton被按下時,ColorForm將被ResultsForm。則事件處理程序爲: [url=/bbs/detail_1784993.html][img]http://image.wangchao.net.cn/it/1323425071322.gif[/img][/url] UpdateButtonClick創建一個字符串S。S的地址將傳遞給GetColor函數,GetColor會創建ColorForm,並將指向S的指針作爲參數傳遞給構造函數。ColorForm一關閉它就被刪除,但若用戶選擇了一種顔色,被選擇顔色名仍然被保存在S中。若用戶沒有選擇顔色就關閉了ColorForm,S中將包含一空串。 上例使用一個串變量從模態窗體獲取信息。當然,根據需要可使用更複雜的對象。記住,應該總是提供一種方法讓調用窗體知道是否模態窗體沒有做任何變化或選擇就關閉了(比如提供缺省爲空的字符串S)。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有