Seguindo com esta pergunta , é possível detectar se alguém está no modo de design ou tempo de execução de dentro do construtor de um objeto?
Sei que isso pode não ser possível e que terei que mudar o que desejo, mas por enquanto estou interessado nesta questão específica.
ISite.DesignMode
.Você está procurando algo parecido com isto:
Você também pode fazer isso verificando o nome do processo:
fonte
devenv
.Componente ... até onde eu sei, não tem a propriedade DesignMode. Esta propriedade é fornecida por Control. Mas o problema é que quando CustomControl está localizado em um Form no designer, esse CustomControl está rodando em modo runtime.
Eu percebi que a propriedade DesignMode funciona corretamente apenas no Form.
fonte
Os controles (formulários, controles do usuário etc.) herdam o
Component class
que tembool property DesignMode
:fonte
OnHandleCreated
.IMPORTANTE
Existe uma diferença de usar Windows Forms ou WPF !!
Eles têm designers diferentes e precisam de verificações diferentes . Além disso, é complicado quando você mistura controles de formulários e WPF. (por exemplo, controles WPF dentro de uma janela do Formulários)
Se você tiver apenas Windows Forms , use este:
Se você tiver apenas WPF , use esta verificação:
Se você misturou o uso de formulários e WPF, use uma verificação como esta:
Para ver o modo atual, você pode mostrar uma MessageBox para depuração:
Observação:
Você precisa adicionar os namespaces System.ComponentModel e System.Diagnostics .
fonte
Você deve usar a propriedade Component.DesignMode. Pelo que eu sei, isso não deve ser usado por um construtor.
fonte
if (!DesignMode)
métodos do OnPaint para ter certeza de que não era spam o tempo de design.Outro método interessante é descrito nesse blog: http://www.undermyhat.org/blog/2009/07/in-depth-a-definitive-guide-to-net-user-controls-usage-mode-designmode-or -modo de usuário/
Basicamente, ele testa o assembly em execução sendo referenciado estaticamente no assembly de entrada. Ele contorna a necessidade de rastrear nomes de assemblies ('devenv.exe', 'monodevelop.exe' ..).
No entanto, ele não funciona em todos os outros cenários, nos quais o assembly é carregado dinamicamente (o VSTO é um exemplo).
fonte
Com a cooperação do designer ... Pode ser usado em Controles, Componentes, em todos os lugares
MessageBox.Show(
linhas devem ser removidas. Isso só me garante que funciona corretamente.fonte
Você pode usar isso
fonte
Este é o método que usei em meu projeto:
Atenção !!!: O código retornado bool está indicando NÃO no modo de design!
fonte
fonte
A solução LicenseManager não funciona dentro do OnPaint, nem this.DesignMode. Recorri à mesma solução de @Jarek.
Esta é a versão em cache:
Esteja ciente de que isso irá falhar se você estiver usando qualquer IDE de terceiros ou se a Microsoft (ou seu usuário final) decidir alterar o nome do executável do VS para algo diferente de 'devenv'. A taxa de falha será muito baixa, apenas certifique-se de lidar com quaisquer erros resultantes que possam ocorrer no código que falha como resultado disso e você ficará bem.
fonte
Se você deseja executar algumas linhas enquanto está sendo executado, mas não no designer do Visual Studio, você deve implementar a propriedade DesignMode da seguinte maneira:
fonte
Os temporizadores ativados por padrão podem causar travamento ao usar controles personalizados / do usuário. Desative-os por padrão e ative somente após a verificação do modo de design
fonte