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

Résolu
rastamath69 Messages postés 45 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 9 novembre 2009 - 13 août 2009 à 13:23
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!

3 réponses

rastamath69 Messages postés 45 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 9 novembre 2009 1
13 août 2009 à 19:00
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!
3
polaris1970 Messages postés 5 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 20 décembre 2009
13 août 2009 à 17:19
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();
}
}
0
polaris1970 Messages postés 5 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 20 décembre 2009
13 août 2009 à 17:26
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
}
0
Rejoignez-nous