Determinar o status do comando usando assemblies de interop

Um VSPackage deve manter o controle do estado dos comandos que ele pode manipular. O ambiente não pode determinar quando um comando manipulado no VSPackage é habilitado ou desabilitado. É responsabilidade do VSPackage informar o ambiente sobre os estados de comando, por exemplo, o estado de comandos gerais, como Recortar, Copiar e Colar.

Fontes de notificação de status

O ambiente recebe informações sobre comandos por meio do método vsPackages, que faz parte da implementação do QueryStatus VSPackage da IOleCommandTarget interface. O ambiente chama o QueryStatus método do VSPackage em duas condições:

  • Quando um usuário abre um menu principal ou um menu de contexto (clicando com o botão direito do mouse), o ambiente executa o método em todos os comandos nesse menu para determinar QueryStatus seu estado.

  • Quando o VSPackage solicita que o ambiente atualize a interface do usuário atual. Essa atualização ocorre como comandos que estão visíveis no momento para o usuário, como o grupo Recortar, Copiar e Colar na barra de ferramentas padrão, ficam habilitados e desabilitados em resposta às ações de contexto e usuário.

    Como o shell hospeda vários VSPackages, o desempenho do shell degradaria inaceitável se fosse necessário sondar cada VSPackage para determinar o status do comando. Em vez disso, o VSPackage deve notificar ativamente o ambiente quando sua interface do usuário for mudada no momento da alteração. Para obter mais informações sobre a notificação de atualização, consulte Atualizar a interface do usuário.

Falha na notificação de status

A falha do VSPackage ao notificar o ambiente de uma alteração de estado de comando pode colocar a interface do usuário em um estado inconsistente. Lembre-se de que qualquer um dos comandos de menu ou menu de contexto pode ser colocado em uma barra de ferramentas pelo usuário. Portanto, atualizar a interface do usuário somente quando um menu ou menu de contexto for aberto não é suficiente.

Confira também