C++Builder從窗體獲取數據

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

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)。

vb.net 中MDI子窗體對其父窗體屬性的獲取與修改
兄弟前些日子做項目,第一次使用vb.net,碰上不少問題,相信很多初學者多多少少都會遇到這些問題,爲了初學者學習方便,小弟總結了一些小經驗,供大家參考討論。第一篇:如何在MDI子窗體中控制父窗體的屬性等等 功...查看完整版>>vb.net 中MDI子窗體對其父窗體屬性的獲取與修改
 
vb.net 中MDI子窗體對其父窗體屬性的獲取與修改
兄弟前些日子做項目,第一次使用vb.net,碰上不少問題,相信很多初學者多多少少都會遇到這些問題,爲了初學者學習方便,小弟總結了一些小經驗,供大家參考討論。第一篇:如何在MDI子窗體中控制父窗體的屬性等等 功...查看完整版>>vb.net 中MDI子窗體對其父窗體屬性的獲取與修改
 
Control Study -> 用獲取路徑方法得到圓形窗體(如將: PictureBox變成圓形)
(一).功能 有時候由于顯示效果,需要將某個控件變一下形狀. 本文舉例將PictureBox[]數組變成圓形.(二).代碼 (這裏說明一下,我個人將它變形是因爲我用PictureBox表示象棋棋子, 由于PictureBox默認是方 ...查看完整版>>Control Study -> 用獲取路徑方法得到圓形窗體(如將: PictureBox變成圓形)
 
.Net中掌握Windows窗體間數據交互(3)
  在第一篇和第二篇文章中我們使用帶參數的構造函數、屬性以及方法實現了數據的交互,接下來要講的是使用靜態類來完成窗體間的數據交互。這個也是我們經常要用到的一種數據交互方法。    三.使用靜態類   ...查看完整版>>.Net中掌握Windows窗體間數據交互(3)
 
.Net中掌握Windows窗體間數據交互(2)
.Net中掌握Windows窗體間數據交互(2)
  《.Net中把握Windows窗體間數據交互(1)》一文中我們講了使用帶參數的構造函數來實現窗體間的數據傳遞,我認爲是用的比較多的一種,接下來讓我們看看另外兩種實現方法。    二.給窗體添加屬性或方法    ...查看完整版>>.Net中掌握Windows窗體間數據交互(2)
 
.Net中掌握Windows窗體間數據交互(1)
.Net中掌握Windows窗體間數據交互(1)
  Windows 窗體是用于 Microsoft Windows 應用程序開發的、基于 .NET Framework 的新平台。此框架提供一個有條理的、面向對象的、可擴展的類集,它使您得以開發豐富的 Windows 應用程序。一個Windows窗體就代表了....查看完整版>>.Net中掌握Windows窗體間數據交互(1)
 
VisualC#實現窗體間數據傳遞(2)
  在上一篇文章中我們曾經指出指出,窗體間數據傳遞第一種情況的解決方法存在一個主要的缺點,就是窗體間傳遞的參數數目是固定的,並且類型也是固定的。這是因爲,上文中修改了從命名空間System.Windows.Forms中的...查看完整版>>VisualC#實現窗體間數據傳遞(2)
 
ASP.NET如何在窗體和窗體之間傳送數據
  大家都知道aspx在同一個頁面中傳值是很容易的(如textBox1.Text等)但有時必須向另一個頁面傳值用以前asp的方法的確覺得不怎麽樣,還要用Request.Form等東西好象又回到了從前。我這裏使用一個類的靜態屬性作爲兩個類...查看完整版>>ASP.NET如何在窗體和窗體之間傳送數據
 
.Net中掌握Windows窗體間數據交互(1)
.Net中掌握Windows窗體間數據交互(1)
  Windows 窗體是用于 Microsoft Windows 應用程序開發的、基于 .NET Framework 的新平台。此框架提供一個有條理的、面向對象的、可擴展的類集,它使您得以開發豐富的 Windows 應用程序。一個Windows窗體就代表了....查看完整版>>.Net中掌握Windows窗體間數據交互(1)
 
 
回到王朝網路移動版首頁