Pergunta

Temos um aplicativo que tem de ser flexível na forma como ele exibe o formulário principal para o usuário, dependendo do usuário, o formulário deve ser um pouco diferente, talvez um extra botão aqui ou ali, ou alguma outra nuance.A fim de parar de escrever o código para remover explicitamente ou adicionar controles, etc, eu virei para o visual herança para resolver o problema, o que eu achava que era um puro, limpo e lógica OO estilo - acontece que a metade do tempo formulários herdados ter um tempo difícil de renderização themeselves no VS por nenhuma boa razão, etc. - e eu tenho a sensação de que os desenvolvedores e, em certa medida Microsoft tem evitado a prática do Visual Herança - você pode confirmar isso, eu estou faltando alguma coisa aqui?

Cumprimentos.

Foi útil?

Solução

Eu pensei que eles tinham mais ou menos ordenada a área de trabalho do designer de problemas, em 2005.Você já tentou o de costume, culpados?

  • Não há resumo de controle de tipos de
  • Nenhum construtor de argumentos em qualquer formulário
  • Inicialização mudou-se para Form_Load como oposição ao Construtor
  • Sem controles no mesmo projeto como o usercontrol/formulário que eles são colocados dentro
  • Feche todos os documentos -> Limpa -> Renovação
  • Reinicie VS

Eu parecia pensar que enquanto você fez todas as opções acima funcionou.....principalmente.

Outras dicas

Eu estou estudando para o (reconhecidamente logo-a-ser-obsoleta) MCAD, e parte do WinForms elemento Visual Herança.

Eu, pessoalmente, não tinha grandes problemas com ele, no entanto, não são considerações para levar em conta.

Para mim, o principal problema tem sempre a inicialização..Você precisa lembrar-se de que o designer não pode/não instanciar formas da mesma forma que o faz em tempo de execução (da mesma forma, é possível fazer isso com o web dev, que é por isso que é preciso ter cuidado com o controle personalizado de renderização).

Também, uma vez que um formulário é alterado, uma completa re-compilação do projeto é necessária a fim de propagar as alterações para o formulário para a criança, de formas que herdam dele.

Eu, pessoalmente, tenho visto nenhuma evidência para sugerir que ele foi "desprezada". AFAIK, ainda é uma boa prática para exercer o código de re-utilização, sempre que possível.O Visual herança que fornece.

Gostaria de sugerir a criação de uma nova causa, com o real problemas que você está tendo, com o código de exemplo?Podemos, então, olhar para ele para ver se podemos fazê-lo funcionar e explicar o porquê :)

Eu vi alguns problemas no VS2005 com isso.Eles eram, em sua maioria devido a problemas com a construção das formas-objetos no designer.Houve problemas com o código que tentou acessar o banco de dados a partir do formulário de construtores, etc.

Você pode depurar problemas como este, ao iniciar uma segunda instância do visual studio e do carregamento de primeira instância do depurador.Se você definir pontos de interrupção no código você pode, em seguida, depurar o que acontece no estilistas em primeira instância.

Outro problema que eu lembro foi genéricos em classes de formulário

public class MyForm<MyObject> : Form

isso não vai funcionar

Muitas vezes eu tropeçar em cima de tais problemas no Visual Studio.Em muitos casos MSVS forms designer não é processado de forma correta.Na época eu trabalhava com WinForms que eu tinha para fazer todo o tipo de estranho truques para habilitar alguns cenários complexos.No entanto, eu acho que o uso de herança visual é muito benéfico e não deve ser jogado fora, independentemente de MSVS designer de bugs.

Eu acho que eu encontrei uma maneira de evitar esse problema.

Não gancho de Evento Form_Load em seu formulário pai, isso irá quebrar o designer.

Também não tome o Padrão construtor vazio longe do Visual Studio no Formulário Pai.Se você quer ter a Injeção de Dependência, criar outro construtor.

Como esta:

public ProductDetail()
{
    InitializeComponent();
}

public ProductDetail(ISupplierController supplierController) : base()
{
    InitializeComponent();
    this.supplierController = supplierController;
}

Em seguida, você pode ainda fazer isso a partir do seu Formulário herdado:

public NewProduct(ISupplierController supplierController)
    : base(supplierController)
{
    InitializeComponent();
}

Isso funcionou para mim até agora, e eu tinha algum estranho problemas de designer também.

um abraço Daniel

Leia isso: http://cs.rthand.com/blogs/blog_with_righthand/archive/2005/11/10/186.aspx

AFAIK, ainda há problemas com o Visual Herança e objetos que dependem de coleções para os elementos de design, normalmente controles de grade etc.Eu acredito que a MS ainda tem removido a possibilidade de mudança de f.ex.um GridView em um formulário herdado/usercontrol etc.Mas outros controles, como a caixa de Texto, Forma, UserControl, Painel etc.deve funcionar como esperado.

Eu até agora não tive nenhum problema com o VI usando 3ª parte controles de grade-me, mas você tem que ter cuidado, em particular, a remoção de itens de coleções DEVE ser evitado.

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