Como colocar um UserControl na caixa de ferramentas do Visual Studio

93

Fiz um usercontrol no meu projeto e, após construir o projeto, preciso colocá-lo na minha caixa de ferramentas e usá-lo como um controle comum. mas eu não posso. o UserControlé na minha namespace do projeto, e eu tentei Choose Itemno menu do botão direito, mas eu não encontrar uma maneira de adicioná-lo.

Saeed
fonte

Respostas:

114

Presumo que você esteja usando o VS2010 (foi como você marcou a questão). Tive problemas para adicioná-los automaticamente à caixa de ferramentas como no VS2008 / 2005. Na verdade, existe uma opção para interromper o preenchimento automático da caixa de ferramentas!

Vá para Ferramentas> Opções> Windows Forms Designer> Geral

Na parte inferior da lista, você encontrará Toolbox> AutoToolboxPopulate, que em uma nova instalação é padronizado como False. Defina-o como verdadeiro e reconstrua sua solução.

Ei, pronto, os controles de usuário em sua solução devem ser adicionados automaticamente à caixa de ferramentas. Talvez seja necessário recarregar a solução também.

DaveF
fonte
31
A palavra-chave aqui para mim era "reconstruir" ... não tinha tentado isso, d'oh! Fazer isso sozinho resolveu isso para mim.
Danny Beckett
2
E, eu tive que reabrir a solução após a reconstrução
Jim Lahman
1
No VS2012, eles agora adicionaram a dica 'A solução atual deve ser reaberta para que isso tenha efeito' ao diálogo de opções.
Carlos P
2
@AnatoliiGumennyi Você terá que seguir as instruções de @Arseny se UserControlestiver fora do projeto atual.
Ataque em
2
Nota: Parece que no VS2013, a configuração Toolbox> AutoToolboxPopulate agora é padronizada como True na instalação nova.
Curmudgeon de
35

Clique com o botão direito na barra de ferramentas e clique em "escolher item" no menu de contexto. Uma caixa de diálogo com componentes registrados é exibida. nesta caixa de diálogo, clique em "Navegar" para selecionar sua montagem com o controle de usuário que deseja usar.

PS. Esta montagem deve ser registrada antes.

Arseny
fonte
17
Você pode explicar 'registrado antes'? Não acho que seja necessário.
Henk Holterman
25

Descobri que o controle de usuário deve ter um construtor sem parâmetros ou ele não aparecerá na lista. pelo menos isso era verdade no vs2005.

Scott
fonte
8
Também no vs2012.
colbybhearn
8
Também no vs2013.
Connor McGuinness
6
Também no vs2015?
serdar
5
Sim, também no vs2015
JRB de
5
Adicionar vs2017 à lista
Ryan
14

Usando o VS 2010:

Digamos que você tenha um projeto Windows.Forms. Você adiciona um UserControl (digamos MyControl) ao projeto e cria tudo. Agora você deseja adicioná-lo à sua caixa de ferramentas.

Assim que o projeto for construído com sucesso uma vez, ele aparecerá em seus componentes do Framework. Clique com o botão direito na caixa de ferramentas para obter o menu de contexto, selecione "Escolher itens ..." e navegue até o nome do seu controle (MyControl) na guia "Componentes do .NET Framework".

Vantagem sobre o uso de dlls: você pode editar os controles no mesmo projeto do seu formulário, e o formulário será construído com os novos controles. No entanto, o controle estará disponível apenas para este projeto.

Nota: Se o controle tiver erros de construção, resolva-os antes de prosseguir para os formulários que os contêm, ou o designer terá um ataque cardíaco.

usuario
fonte
1
Ele também pode estar disponível para outros projetos se você importar o .exe na caixa de ferramentas.
Sebastian
1
Qualquer resposta contendo "ou o designer teve um ataque cardíaco" tem meu voto!
Joel
Fiz a mesma coisa e está tudo bem, mas quando movi o código para outro projeto, criei uma dll e referenciei o arquivo dll, o controle personalizado não apareceu.
Fandi Susanto
6

Eu tinha muitos controles de usuário, mas um se recusou a mostrar na caixa de ferramentas , embora eu reconstruísse a solução e ela estivesse marcada na caixa de diálogo Escolher itens ...

Solução:

  1. De Solution Explorer I direito clicado o arquivo de controle de usuário ofensor e selecionou Excluir do Projeto
  2. Reconstrua a solução
  3. Clique com o botão direito do mouse no controle de usuário e selecione Incluir no Projeto (supondo que você tenha Mostrar todos os arquivos habilitado no Gerenciador de Soluções )

Observe que isso também requer que a opção AutoToolboxPopulate esteja ativada. Como a resposta de @DaveF sugere.

Solução alternativa: não tenho certeza se isso funciona e não poderia tentar porque já resolvi meu problema, mas se você desmarcou o controle do usuário na caixa de diálogo Escolher itens ... , clique em OK e abra-o novamente e verifiquei o controle do usuário. Isso também pode funcionar.

MoMo
fonte
3

Existem algumas maneiras.

  1. Em seu projeto original, escolha Arquivo | Exportar modelo
    Em seguida, selecione ItemTemplate e siga o assistente.

  2. Mova seu UserControl para uma ClassLibrary separada (e corrija os namespaces etc.).
    Adicione um ref à biblioteca de classes de projetos que precisam dele. Não se preocupe com o GAC nem nada, apenas o arquivo DLL.

Eu não aconselharia colocar um UserControl na caixa de ferramentas normal, mas isso pode ser feito. Veja a resposta de @Arseny

Henk Holterman
fonte
Esta parece ser a melhor abordagem. A única desvantagem é que você não pode editar o controle visualmente (ou pelo menos não descobri como).
Sebastian
Esquece, adicionei o template como elemento e o designer está mostrando.
Sebastian
Concordo totalmente e também desaconselho fortemente vincular a uma DLL se o projeto que contém o UserControl estiver na mesma solução. E funcionará com uma DLL, ou seja, o UserControl no Projeto Biblioteca aparecerá em qualquer projeto WinForms que faça referência à biblioteca (após uma reconstrução, é claro ;-)).
Xan-Kun Clark-Davis
2

No meu caso, não consegui ver nenhum dos controles do projeto. Somente clicando com o botão direito na caixa de ferramentas e selecionando "Mostrar todos" eu os vi, mas ainda assim eles estavam desativados ...

Alterar o tipo de projeto do aplicativo do Windows para ClassLibrary fez a correção.

Efraim
fonte
1

Pergunta básica se você estiver usando genéricos em seu controle de base. Se sim:

digamos que temos o controle:

public class MyComboDropDown : ComboDropDownComon<MyType>
{
    public MyComboDropDown() { }
}

MyComboDropDown não permitirá abrir o designer nele e não será mostrado na caixa de ferramentas. Por quê? Porque o controle básico ainda não está compilado - quando MyComboDropDown é compilado. Você pode modificar para este:

public class MyComboDropDown : MyComboDropDownBase
{
    public MyComboDropDown() { }
}

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Depois de reconstruir e redefinir a caixa de ferramentas, deve ser possível ver MyComboDropDown no designer e também na caixa de ferramentas

Andrzej
fonte
0

Recompilar funcionou para mim!

Lex van Buiten
fonte