Come rilevare i tempi di progettazione in un progetto di libreria di controllo VS.NET 2003
-
02-07-2019 - |
Domanda
Il codice seguente non funziona come previsto per rilevare se è in modalità progettazione (VS.Net 2003 - Libreria di controllo):
if (this.Site! = null & amp; & amp; this.Site.DesignMode == true)
{
// Modalità di progettazione
}
altro
{
// Runtime
}
Viene utilizzato in un controllo utente complesso, derivante da un altro controllo utente e includendo altri controlli utente su di esso.
Esiste un altro modo per rilevare i tempi di progettazione in un VS.NET 2003 o qual è il problema con il codice sopra?
Soluzione
DesignMode
non funzionerà all'interno di un costruttore. Alcune alternative (non sono sicuro se funzionano in 1.1) sono
if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
o
chiama GetService (typeof (IDesignerHost))
e vedi se restituisce qualcosa.
Ho avuto più fortuna con la prima opzione.
Altri suggerimenti
Suppongo che potresti usare HttpContext.Current == null come descritto in http: / /west-wind.com/weblog/posts/189.aspx
In .Net 2.0 c'è Control.DesignMode ( http://msdn.microsoft.com/en-us/library/system.web.ui.control.designmode.aspx ). Immagino che tu abbia buone ragioni per rimanere su VS 2003, quindi l'aggiornamento potrebbe non essere un'opzione per te.
Aggiorna Se stai eseguendo Winforms, Component.DesignMode ( http://msdn.microsoft.com/en-us/library/system.componentmodel.component.designmode.aspx ) è il modo giusto per verificare. Tuttavia, se this.Site.DesignMode non funziona correttamente, Component.DesignMode potrebbe non funzionare altrettanto bene, poiché fa esattamente il controllo che stai facendo (Site! = Null & amp; & amp; Site.DesignMode).
Potrebbe essere un colpo lungo, ma sei sicuro che il tuo controllo di base non abbia la precedenza sulla proprietà del Sito?