2012-02-29 1 views
0

J'ai un magasin implémenté dans ASP.NET/C#. Il y a une page - ReservationProduct.aspx - qui a un contrôle pour montrer le produit - BuyTourProduct - et un autre contrôle pour montrer les détails du produit - TourProductDetail.Accéder à un contrôle utilisateur à partir d'un autre contrôle

Je sais que c'est une bonne forme de garder les deux découplés mais c'est pour un usage très spécifique en magasin. Je veux que le BuyTourProduct soit en mesure de définir un panneau dans le contrôle TourProductDetail pour être visible ou ne pas utiliser PanelName.Visible=true|false.

Comment puis-je avoir des attributs d'ensemble de contrôle sur un panneau de l'autre contrôle? J'espère que je dis cela assez clairement. Au fait, c'est un couple de 3èmes contrôles de produit que je modifie donc en changeant le fait qu'ils sont 2 contrôles séparés n'est pas vraiment une option pour nous.

Merci.

Répondre

1

Dans le contexte de UserControl, le contrôle utilisateur ne connaît pas l'autre UserControl ou son contenu. Vous devez interagir avec les contrôles du contexte Page, car la page est consciente des deux contrôles.

Vous aurez besoin de deux choses:

  • Un événement tiré du contrôle de BuyTourProduct.
  • Une méthode pour interagir avec PanelName dans le contrôle TourProductDetail.

Si un événement existe déjà, utilisez-le; Dans le cas contraire, vous devrez modifier la source du BuyTourProduct, exposer un événement et déclencher cet événement dans ce code. Vous voudrez également appeler cet événement depuis le contrôle.

public class BuyTourProduct : UserControl 
{ 
    // ... 

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

    // ... 

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

    // ... 
} 

Ensuite, vous aurez besoin d'ajouter une méthode pour interagir avec l'intérieur PanelName TourProductDetail:

public class TourProductDetail : UserControl 
{ 
    // ... 

    private Panel PanelName; 

    // ... 

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

    // ... 
} 

De la page, vous abonner à l'événement que vous voulez ou 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

Merci pour l'exemple de code. Ça aide beaucoup! – Deverill

2

Il est toujours préférable d'écrire un événement dans le contrôle utilisateur BuyTourProduct (Ex: Besoin de mettre à jour le détail du produit) Ensuite, vous pouvez gérer cet événement dans la page où vous placez le contrôle.

Dans le contrôle TourProductDetail, vous pouvez écrire une propriété publique pour masquer et afficher le panneau. Par conséquent, dans le gestionnaire d'événements ci-dessus pour le gestionnaire d'événements BuyTourProduct dans la page, appelez la propriété ShowHidePanel du contrôle TourProductDetail.

+0

+1 Je pense toujours comme un codeur de flux de programme linéaire au lieu de la POO. Merci pour votre méthode. – Deverill

Questions connexes