Pergunta

Código abaixo não está funcionando como esperado para detectar se ele está em modo de design (VS.Net 2003 - Biblioteca de Controle):

if (this.Site! = Null && this.Site.DesignMode == true)
{
// Modo Design by }
outra
{
// Run-time
}

É usado em um controle de usuário complexa, derivada de outro controle de usuário e incluindo outros controles de usuário nele.
Existe outra maneira de detectar tempo de design em um VS.NET 2003 ou qual é o problema com o código acima?

Foi útil?

Solução

DesignMode não vai trabalhar a partir de dentro de um construtor. Algumas alternativas (não tenho certeza se eles trabalham em 1.1) são

if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)

ou

GetService(typeof(IDesignerHost)) chamada e ver se ele retorna algo.

Eu tive melhor sorte com a primeira opção.

Outras dicas

Eu acho que você poderia usar HttpContext.Current == null como descrito em http: / /west-wind.com/weblog/posts/189.aspx

Na Net 2.0 há Control.DesignMode ( http://msdn.microsoft.com/en-us/library/system.web.ui.control.designmode.aspx ). Eu acho que você tem uma boa razões para ficar no VS 2003, porém, assim atualização pode não ser uma opção para você.

Atualizar Se você está fazendo WinForms, Component.DesignMode ( http://msdn.microsoft.com/en-us/library/system.componentmodel.component.designmode.aspx ) é o caminho certo para verificar. Embora, se this.Site.DesignMode não funciona corretamente, Component.DesignMode pode não funcionar tão bem, como faz exatamente o cheque que você está fazendo (site! = Null && Site.DesignMode).

Isso pode ser um tiro longo, mas tem certeza de que seu controle de base não substituir a propriedade Site?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top