[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
Dernière intervention
9 novembre 2009
- 13 août 2009 à 13:23 - Dernière réponse :
Messages postés
45
Date d'inscription
vendredi 9 avril 2004
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 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Dernière intervention
9 novembre 2009
- 13 août 2009 à 19:00
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!

Merci rastamath69 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de rastamath69
Messages postés
5
Date d'inscription
vendredi 24 novembre 2006
Dernière intervention
20 décembre 2009
- 13 août 2009 à 17:19
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
Dernière intervention
20 décembre 2009
- 13 août 2009 à 17:26
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.