Voici un exemple version actualisée de la méthode de l'interface :
void ShowDialog<TParentForm, TDialogForm, TModel, TEntity>(TParentForm t, TDialogForm m, Action callback)
where TParentForm : UserControl
where TModel : class, IModel<TEntity>, new()
where TDialogForm : Form, IEditableItem<TEntity>, new();
J'ai fait quelques suppositions sur la version précédente, donc pendant ma phase de test et de raffinement, la signature de la méthode a changé. Il s'agit toujours plus ou moins d'un exercice éducatif pour moi, je voulais donc savoir comment le réaliser plutôt que de choisir la solution de facilité.
Un échantillon mise en œuvre de la méthode :
public void ShowDialog<TParentForm, TDialogForm, TModel, TEntity>(TParentForm t, TDialogForm m, Action callback)
where TParentForm : UserControl
where TModel : class, IModel<TEntity>, new()
where TDialogForm : Form, IEditableItem<TEntity>, new()
{
using (var dialogToShow = new TDialogForm())
{
dialogToShow.StartPosition = FormStartPosition.CenterScreen;
dialogToShow.FormBorderStyle = FormBorderStyle.FixedSingle;
dialogToShow.Model = new TModel();
// 2. show the new user control/form to the user.
var result = dialogToShow.ShowDialog(t);
// 3. handle the dialog result returned and update the UI appropriately.
if (result == DialogResult.OK)
{
// print status label.
callback.Invoke();
}
}
}
Je ne suis pas tout à fait sûr de la raison pour laquelle le paramètre 'TDialogForm m' est toujours là, puisqu'il ne semble pas être utilisé ailleurs.
Comment utiliser la méthode :
private void BtnAddNewServiceClick(object sender, EventArgs e)
{
Presenter.ShowDialog<ServerRolesControl, AddNewServiceForm, ServiceModel, Role>(this, new AddNewServiceForm(), SetAddedRolesLabel);
}
private void BtnViewAllServicesClick(object sender, EventArgs e)
{
Presenter.ShowDialog<ServerRolesControl, ViewRolesForm, ServiceModel, Role>(this, new ViewRolesForm(), SetDeletedRolesLabel);
}
Je devrais mettre à jour la méthode de l'interface mais j'ai eu tellement de mal à la faire fonctionner que je préfère la laisser tranquille maintenant =).