[C#] empêcher le designer d'exécuter une ligne de code [Résolu]

Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 novembre 2009
- - Dernière réponse : rastamath69
Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 novembre 2009
- 13 août 2009 à 19:00
Bonjour,

Je travaille actuellement avec VS2008.
J'ai créé un UserControl qui dans son constructeur fait appelle à une méthode de DLL (elle utilise un backGroundWorker et une form) pour faire un chargement spécifique .

La compilation fonctionne bien et l'exécution également. Mon souci apparaît uniquement lorsque je veux me servir du designer, ce dernier me fait des erreurs. Il bloque sur la méthode de ma DLL et dit qu'il ne la trouve pas.

Je souhaitais donc savoir si via un #if je pouvais arriver à l'empêcher d'exécuter cette ligne?

Cela donnerai un truc dans ce genre:

public MonUC()
{
    InitializeComponent();

    //code à exécuter
    ...

#if ???
    //code que je ne veux pas exécuter juste quand j'utilise le designer
#endif
    //code à exécuter
}


Pour info "#if RELEASE || DEBUG" ne fonctionne pas vu que le designer exécute forcément le constructeur dans l'un de ces modes.

Merci d'avance!

Rastamath69, plus on travaille , plus on a des problèmes, donc plus on a de chances d'en résoudre!
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 novembre 2009
3
Merci
Bonsoir,

Malheureusement cette propriété "DesignMode" est toujours fausse dans un constructeur tout simplement parce qu'elle est déduite de l'interface ISite (une des propriétés de l'interface IComponent, qui est implémenté par tous les contrôles, est de type ISite. C'est ce qui nous permet d'accéder à DesignMode).
Or le constructeur est appelé avant que le control soit associé à un objet de type ISite.

Sinon pour mettre en oeuvre votre méthode il suffirait d'implémenter ceci dans l'événement Load du UserControl.

J'avais essayé ces solutions, mais mon problème venait en fait d'un bug dans VS2008. Un cache listant les signatures de méthodes de ma DLL n'avait pas été remis à jour visiblement. Une suppression manuel du dossier "Debug" puis un ReBuild m'ont permis de m'en sortir!

Merci et bonne soirée!

Rastamath69, plus on travaille , plus on a des problèmes, donc plus on a de chances d'en résoudre!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de rastamath69
Messages postés
5
Date d'inscription
vendredi 24 novembre 2006
Statut
Membre
Dernière intervention
20 décembre 2009
0
Merci
La solution passe par l'utilisation de la propriété DesignMode qui prend la valeur True si on se trouve dans le designer

private Boolean enable = false;
public Boolean Enable
{
get { return enable; }
set
{
enable = value;
if (!DesignMode)
timer.Start();
}
}
Commenter la réponse de polaris1970
Messages postés
5
Date d'inscription
vendredi 24 novembre 2006
Statut
Membre
Dernière intervention
20 décembre 2009
0
Merci
Soit dans ton code :
public MonUC()
{
    InitializeComponent();

    //code à exécuter
    ...

if (!DesignMode)
{
    //code que je ne veux pas exécuter juste quand j'utilise le designer
}
    //code à exécuter
}
Commenter la réponse de polaris1970