J'ai ajouté un EventHandler pour l'événement Click à une imagebox mais à l'exécution ce gestionnaire n'est jamais appelé (le débogueur me montre qu'il est ajouté au contrôle directement mais quand je clique sur la photo, rien ne se passe). Je suppose que cela a quelque chose à voir avec mon héritage. J'ai un usercontrol appelé AbstractPage (ce n'est pas vraiment abstrait puisque le concepteur n'aime pas ça) qui se compose seulement d'un en-tête et de cette image mais il fournit assez de fonctions dont les pages réelles dépendent.Comment appeler un EventHandler dans une classe parent
#region Constructor
public AbstractPage()
{
InitializeComponent();
lblHeading.Text = PageName;
picLock.Click += new EventHandler(picLock_Click);
}
#endregion
#region Events
void picLock_Click(object sender, EventArgs e)
{
...do some stuff
}
#endregion
Les implémentations de page héritent simplement de cette classe et ajoutent leurs contrôles et leur comportement. Nous avons récemment découvert que le sous-classement UserControl n'est pas performant et que nous y perdons des performances, mais c'est la meilleure façon de le faire (je ne veux pas c & p fonctionner pour 25 pages et les maintenir).
Mon pageA ressemble à ceci
public partial class PageA : AbstractPage
{
#region Constructor
public PageA()
{
// I dont call the base explicitely since it is the
// standard constructor and this always calls the base
InitializeComponent();
}
#endregion
public override string PageName
{
get { return "A"; }
}
public override void BindData(BindingSource dataToBind)
{
...
}
Quoi qu'il en soit, le picLock_Click est jamais appelé et je ne sais pas pourquoi?
Les pages sont tous mis dans un PageControl qui consiste en un TreeView et un TabContainer où les pages sont déposées une fois que j'appelle addPage (Ipage)
public partial class PageControl {
...
protected virtual void AddPages()
{
AddPage(new PageA());
AddPage(new PageD());
AddPage(new PageC());
...
}
protected void AddPage(IPage page)
{
put pagename to treeview and enable selection handling
add page to the tabcontainer
}
Merci à l'avance
J'ai eu le même problème que je n'ai jamais résolu. J'ai travaillé autour de lui en implémentant le gestionnaire dans chaque classe dérivée et appelé la méthode de base – Calanus
Le concepteur n'aime pas abstrait? Depuis quand est abstrait un cas de goût? – Dykam
Pour être plus précis: le concepteur ne peut pas travailler avec des classes abstraites car il appelle toujours le constructeur standard. En Java, j'ai aimé avoir des classes d'interface utilisateur abstraites puisque vous pouvez gagner beaucoup de temps avec eux. – lostiniceland