0

カスタムグリッド(子クラス)を使用するコントロール(親クラス)を作成しようとしています。グリッドには、[親]コントロールのプロパティ値に基づいてグリッド自体にデータを入力するための一連のコンストラクターとメソッドがあります。

これらのプロパティ値をグリッドで使用できるようにする唯一の方法は、それらを作成することです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
4

1 に答える 1

0

共有を使用しないでください。アプリに複数のカスタムコントロールを配置するとすぐにアプリが破損します。

親コントロールのコンテキストにのみグリッドを存在させたい場合は、ListViewコントロールがItemsコレクションを公開するのと同じようにグリッドを公開することを検討してください。

グリッドが(親)コントロールのフィールドにアクセスできるようにする場合は、いくつかの方法があります。親のインスタンスをグリッドに渡すか、グリッドに標準のControlメソッドを使用してその親参照を取得させるか、グリッドを親の内部クラスとして実装することができます。

于 2012-06-28T12:43:14.177 に答える