2013-02-23 43 views

回答

2

你最好的辦法就是讓類似的方式,如下面的用戶控件的公共屬性:

public TextBox getMyTextBox() 
{ 
    return this.myTextBox; 
} 

這將給予控制作爲主網頁訪問整個。如果你只得到一個值或兩個興趣再做到這一點:

public String getMyTextBoxValue() 
{ 
    return this.myTextBox.Text; 
} 

根據您希望能夠從母版頁用戶控件訪問什麼,你可以傳遞給一個參考創建用戶控制(如在構造函數的參數)時

private object needObject; 

public MyUserControl(object objectToReference) 
{ 
    this.needObject = objectToReference; 
} 

這樣,您必須將對象的引用對象。如果您正在動態創建控件,這將很容易。如果你希望他們在你的表單設計從一開始就做一個單獨的方法來爲你設置參考。

public void setParentReference(object objectToReference) 
{ 
    this.needObject = objectToReference; 
} 

在主頁面,您可以簡單地只要叫上你給用戶控件傳遞您所需要的任何對象這個方法(因爲它不是一個原始的,如果它是一個原始值,然後使用ref傳遞作爲參考因爲基元默認發送值)作爲參數,並且從usercontrol的那一點將有權訪問該對象。

當然這僅僅是存儲引用一個簡單對象的例子(你可以在你想分享或任何其他值一些類通過。)

如果你想訪問你的用戶控件中的父那麼你應該記住,Control.Parent可以讓你訪問當前控件的父項。

由於UserControl類繼承ContentControl,繼而從Control繼承,你可以簡單地做到這一點。

object parentReference = this.Parent; 

這是一個更好的做法是在這裏使用object,然後檢查它是否是一個typeof形式,因爲如果是在一個容器中,然後將容器將被保存,它可能會導致異常,如果變量類型爲Form

您也可以使用它來獲取ParentForm。

Form parentReference = this.ParentForm; 

但要記住的事情是,如果你剛剛創造了這個動態控制,但尚未將其添加到任何形式或控制兒童列出父和ParentForm將null所以請確保您驗證對於null之前使用它或試圖把它作爲東西。

然後,您可以使用此操作來使用表單中的任何屬性。我假設你的主窗體被稱爲Form1。(public partial class Form1 : Form

((Form1)parentReference).somePublicProperty = someValue; 

希望它爲您清除它。

+0

感謝Daniel Wardin先生的回答。它的形成方式非常感謝。 – Anjana 2013-02-24 05:52:31

+0

不客氣Anjana! – 2013-02-24 12:32:37

相關問題