2010-01-21 8 views

Répondre

0

Ce problème m'a ennuyé pendant un certain temps. Je ne pense pas que ma solution soit parfaite, mais cela aide certainement mes développeurs juniors à coder. Nous avons un contrôle d'utilisateur de base que tous les contrôles utilisateur héritent et nous (comme vous) nous avons une classe de page de base que toutes les pages doivent hériter (règle d'équipe). Dans le contrôle utilisateur est une propriété appelée ParentForm qui est fortement typée au type de page spécifique qui le contiendra (la baseclass de la page si elle est variable ou inconnue à ce moment). Au cours de l'événement de chargement de la page, nous définissons manuellement la propriété ParentForm de tous les contrôles utilisateur (nous le faisons également dans notre page maître pour tous les contrôles de niveau de page maître).

protected Page_Load(object sender, System.EventArgs e) 
{ 
    this.myControl.ParentForm = this; 
    this.myControl2.ParentForm = this; 
} 

Cela permet un accès immédiat de tout contrôle utilisateur à la page et l'une de ses méthodes exposées. Il fournit également une méthode standardisée (au sein de notre équipe) permettant aux contrôles de communiquer entre eux via une interface dans ParentForm.

Notre standard consiste à effectuer cette affectation manuellement. Pour moi, c'était une considération du personnel de s'assurer que les développeurs sont conscients des contrôles qu'ils ajoutent (ne pas définir le ParentForm provoquera des exceptions de référence NULL si vous essayez d'y accéder évidemment). Si vous souhaitez effectuer ce paramètre de façon automagique, vous pouvez utiliser l'événement Page_InitComplete de la classe de base pour parcourir tous les contrôles utilisateur et définir le ParentForm sur "this" de cette façon.

0

Être dans un autre répertoire obtiendrait visual studio pour leur donner différents espaces de noms par défaut, ce qui provoque le parent la classe de page n'est pas visible par le contrôle.

Assurez-vous que les déclarations d'espace de noms des deux classes sont identiques ou importez l'espace de noms de classe de pages parent dans le contorl avec l'instruction using.

Questions connexes