2012-02-29 70 views
0

我有一個在ASP.NET/C#中實現的商店。有一個頁面 - ReservationProduct.aspx - 它有一個控件來顯示產品 - BuyTourProduct - 另一個控件顯示產品詳細信息 - TourProductDetail從另一個控件訪問用戶控件

我知道這是保持兩個分離的良好形式,但這是一個非常具體的商店使用。我希望BuyTourProduct能夠將TourProductDetail控件中的面板設置爲可見或不使用PanelName.Visible=true|false

如何在另一個控件的面​​板上有一個控件集屬性?我希望我說得很清楚。

順便說一句,這是我修改的第三個產品控件的幾個,所以改變他們是2個單獨控件的事實對我們來說不是一個真正的選擇。

謝謝。

回答

1

在用戶控件的上下文中,用戶控件不知道其他用戶控件或其內容。您需要與頁面上下文中的控件進行交互,因爲該頁面可以識別這兩個控件。

你需要兩樣東西:

  • 從BuyTourProduct控制觸發的事件。
  • 與TourProductDetail控件中的PanelName交互的方法。

如果一個事件已經存在,請使用它;否則,它將要求您修改BuyTourProduct的來源,並在該代碼中公開事件並觸發該事件。然後,您還想從控件中調用此事件。

public class BuyTourProduct : UserControl 
{ 
    // ... 

    public delegate void MyHideEventDelegate(); 
    public event MyHideEventDelegate MyHideEvent; 

    // ... 

    public void SomeFunction() 
    { 
     if (MyHideEvent != null) 
      MyHideEvent(); 
    } 

    // ... 
} 

接下來,你需要添加一個方法與PanelName互動裏面TourProductDetail:

public class TourProductDetail : UserControl 
{ 
    // ... 

    private Panel PanelName; 

    // ... 

    public void SetPanelNameVisible(Boolean visible) 
    { 
     PanelName.Visible = visible; 
    } 

    // ... 
} 

從頁面,你會訂閱你想要的事件或MyHideEvent:

public partial class ReservationProduct : System.Web.UI.Page 
{ 
    // ... 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     buyTourProduct.MyHideEvent += new BuyTourProduct.MyHideEventDelegate(buyTourProduct_MyHideEvent); 
    } 

    // ... 

    void buyTourProduct_MyHideEvent() 
    { 
     tourProductDetail.SetPanelNameVisible(false); 
    } 

    // ... 
} 
+0

感謝您的示例代碼。它有很大幫助! – Deverill 2012-02-29 17:51:23

2

在用戶控件中寫入事件總是比較好的。BuyTourProduct(例如:需要更新產品詳細信息) 然後,您可以在放置控件的頁面中處理此事件。

在TourProductDetail控件中,您可以編寫一個公共屬性來隱藏和顯示面板。

因此,在頁面中的BuyTourProduct事件處理程序的上述事件處理程序調用TourProductDetail控件的ShowHidePanel屬性。

+0

+1我仍然在想像線性程序流程編碼器而不是OOP。謝謝你的方法。 – Deverill 2012-02-29 17:52:38

相關問題