2012-06-28 95 views
0

我試圖創建一個使用自定義網格(子類)的控件(父類)。網格有一系列基於[parent]控件中屬性值填充的構造函數和方法。可以訪問父屬性的私人子類型

我發現使這些屬性值可用於網格的唯一方法是讓它們爲Shared,但這導致我所有類型的問題。

要求

  • 在控制(父)屬性必須是網格(子)訪問。
  • 控件中的屬性必須在設計時屬性瀏覽器中可見。
  • 網格類只能由父類實例化。

作爲備註:請指出您的答案是否允許我在孩子和父母之間來回共享屬性/方法。這將是很好的,但只是一個獎金。

感謝;)

編輯 - 根據我的情況很簡單的例子:

Partial Public Class catContent 
    Inherits System.Web.UI.UserControl 

    Protected Sub Page_Load(sender, e) Handles Me.Load 
     Page.Controls.Add(New CategoryResultGrid(category)) 
    End Sub 

    Private Shared _product As String = String.Empty 

    Shared Property Product() As String 
     Get 
      Return _product 
     End Get 
     Set(ByVal value As String) 
      _product = value.Trim() 
     End Set 
    End Property 

    Private Class CategoryResultGrid 
     Inherits GridView 

     Sub New(ByVal category As String) 
      'How do I access "Product" here without sharing it? 
     End Sub 
    End Class 
End Class 

回答

0

不要使用共享的,它會只要你把你不止一個打破你的應用程序自定義控件在您的應用程序

如果您只希望網格存在於父控件的上下文中,那麼請考慮將其暴露給類似於ListView控件公開其Items集合的方式。

如果您希望您的網格訪問(父級)控件中的字段,有幾種方法可以做到這一點。您可以將父實例傳遞給網格,您可以讓網格使用標準的控制方法來獲取其父引用,也可以將網格實現爲父類的內部類。

+0

因此,鑑於上面我添加的例子,你會推薦什麼?很明顯,我想擺脫'共享'屬性,但是如何將「產品」暴露給我的內部類? – Chiramisu

+0

當你說我可以引用父實例時,我最感興趣的是什麼?這絕對是我需要的,因爲我將在各種頁面上有多個這種控件的副本,所以內部網格絕對必須訪問它們各自的父實例屬性。 – Chiramisu

+0

只要內部類有引用,內部類甚至可以訪問外部類的私有狀態。所以,如果你添加一個'catContent'類型的附加構造函數arg到'CategoryResultGrid',然後在創建它時傳遞'Me',那麼你應該全部設置。 – tcarvin