Notificações e progresso do Visual Studio

Sistemas de notificação

Há várias maneiras de informar ao usuário o que está acontecendo no Visual Studio em relação às suas tarefas de desenvolvimento de software.

Ao implementar qualquer tipo de notificação:

  • Mantenha o número de notificações no número mínimo efetivo. As mensagens de notificação devem se aplicar à maioria dos usuários do Visual Studio ou a usuários de uma área de recurso/recurso específica. O uso excessivo de notificações pode desviar o usuário ou diminuir a percepção de facilidade de uso do sistema.

  • Verifique se você está apresentando mensagens claras e acionáveis que o usuário pode usar para invocar o contexto apropriado para fazer escolhas mais complexas e tomar outras ações.

  • Apresente mensagens síncronas e assíncronas adequadamente. As notificações síncronas indicam que algo precisa de atenção imediata, como quando um serviço Web falha ou uma exceção de código é lançada. O usuário deve ser informado dessas situações imediatamente de uma maneira que exija sua contribuição, como em um diálogo modal. As notificações assíncronas são aquelas que o usuário deve conhecer, mas não deve agir imediatamente, como quando uma operação de compilação é concluída ou uma implantação de site é concluída. Essas mensagens devem ser mais ambientadas e não interromper o fluxo de tarefas do usuário.

  • Use diálogos modais somente quando necessário para impedir que o usuário tome outras ações antes de reconhecer a mensagem ou tomar uma decisão apresentada na caixa de diálogo.

  • Remova as notificações de ambiente quando elas não forem mais válidas. Não exija que o usuário descarte uma notificação se já tiver tomado medidas para resolver o problema sobre o qual foi notificado.

  • Esteja ciente de que as notificações podem levar a falsas correlações. Os usuários podem acreditar que uma ou mais de suas ações dispararam uma notificação quando, na verdade, não havia relação causal. Seja claro na mensagem de notificação sobre o contexto, o gatilho e a origem da notificação.

Escolhendo o método certo

Use esta tabela para ajudá-lo a escolher o método certo para notificar o usuário sobre sua mensagem.

Método Uso Não usar
Caixas de diálogo de mensagem de erro modal Use quando uma resposta do usuário for necessária antes de continuar. Não utilize quando não houver necessidade de bloquear o usuário e interromper seu fluxo. Evite usar diálogos modais se for possível mostrar a mensagem de outra forma menos intrusiva.
Barra de status do IDE Use quando houver informações textuais ambientais sobre o status de um processo. Não use sozinho. Melhor usado em conjunto com outro mecanismo de feedback.
Barra de informações incorporada Em uma janela de ferramenta ou janela de documento, use para notificar o progresso, o estado do erro, os resultados e/ou as informações acionáveis. Não use se as informações não forem relevantes para o local onde a barra de informações está colocada.

Não use fora de uma janela de documento/ferramenta.
Alterações do cursor do mouse Pode ser usado para notificar que um processo está em andamento. Também usado para notificar que há uma alteração de estado no mouse, como quando arrastar/soltar está em andamento ou que o cursor do mouse está em um determinado modo, como o modo de desenho. Não use para alterações de progresso curtas ou se o cursor for provável (por exemplo, quando vinculado a partes de um processo de execução mais longo em vez de a todo o processo).
Indicadores de progresso Use quando precisar relatar o progresso (determinado ou indeterminado). Há uma variedade de tipos de indicadores de progresso e uso específico para cada um. Consulte Indicadores de progresso.
Janela Notificações do Visual Studio A janela Notificações não é extensível publicamente. No entanto, ele é usado para comunicar uma variedade de mensagens sobre o Visual Studio, incluindo problemas críticos com sua licença e notificações informativas de atualizações para o Visual Studio ou para pacotes. Não use para outros tipos de notificações.
Lista de erros Quando o problema está diretamente relacionado à solução aberta no momento do usuário com um problema (erro/aviso/informações), talvez seja necessário executar uma ação no código.

Isso incluiria, por exemplo:

- Mensagens do compilador (erro/aviso/info)

- Analisador de código/mensagens de diagnóstico sobre o código

- Construir mensagens

Pode ser apropriado para problemas relacionados aos arquivos de projeto ou solução, mas considere uma indicação do Gerenciador de Soluções primeiro.
Não use para itens que não tenham qualquer relação com o código de solução aberto do usuário.
Notificações do editor: Lâmpada Use quando você tiver uma correção disponível para corrigir um problema que existe no arquivo aberto.

Observe que a lâmpada também deve ser usada para hospedar ações rápidas que são tomadas no código do usuário sob demanda, como refatoração, mas nesse caso não aparecerá "estilo de notificação".
Não use para itens que não tenham qualquer relação com o arquivo aberto.
Notificações do editor: Squiggles Use para alertar o usuário sobre um problema com uma extensão específica de seu código aberto (por exemplo, um rabisco vermelho para erros). Não use para itens que não se relacionam a uma extensão específica de seu código aberto.
Barras de status incorporadas Use para fornecer status relacionado ao conteúdo ou processo dentro do contexto de uma janela de ferramenta, janela de documento ou janela de diálogo específica. Não use para notificações gerais de produtos, processos ou itens que não tenham qualquer relação com o conteúdo dentro da janela específica.
Notificações da bandeja do Windows Use para exibir notificações para processos fora do processo ou aplicativos complementares. Não use para notificações relevantes para o IDE.
Bolhas de notificação Use para notificar sobre um processo remoto ou alteração fora do IDE. Não use como meio para notificar o usuário sobre processos dentro do IDE.

Métodos de notificação

Caixas de diálogo de mensagem de erro modal

Uma caixa de diálogo de mensagem de erro modal é usada para exibir uma mensagem de erro que requer a confirmação ou ação do usuário.

Modal error message

Uma caixa de diálogo de mensagem de erro modal alertando o usuário de uma cadeia de conexão inválida para um banco de dados

Barra de status do IDE

A probabilidade de os usuários perceberem o texto da barra de status está correlacionada à experiência geral do computador e à experiência específica com a plataforma Windows. A base de clientes do Visual Studio tende a ser experiente em ambas as áreas, embora até mesmo usuários experientes do Windows possam perder alterações na barra de status. Portanto, a barra de status é melhor usada para fins informativos ou como uma pista redundante para informações apresentadas em outro lugar. Qualquer tipo de informação crítica que o usuário deve resolver imediatamente deve ser fornecida em uma caixa de diálogo ou na janela da ferramenta Notificações.

A barra de status do Visual Studio foi projetada para permitir que vários tipos de informações sejam exibidos. Ele é dividido em regiões para feedback, designer, barra de progresso, animação e cliente.

A região de feedback e a região do designer estão sempre visíveis. A barra de progresso e as regiões de animação são sempre dinâmicas e baseadas no contexto do usuário. A região do designer tem uma largura estática determinada pelo comprimento da cadeia de caracteres que é extraída de um recurso que acompanha a mensagem de texto. Isso permite que a localização redimensione a largura sem exigir uma alteração de código. Para o inglês, a largura dessa cadeia de caracteres é de aproximadamente 220 pixels. A região do designer se comportará normalmente e a região de feedback absorverá o espaço restante.

A barra de status também é colorida para adicionar interesse visual e valor funcional, comunicando várias alterações de estado do IDE, como quando o IDE está no modo de depuração.

IDE status bar color changes

Cores da barra de status do IDE

Barra de informações incorporada

Uma barra de informações pode ser usada na parte superior de uma janela de documento ou janela de ferramenta para informar o usuário sobre um estado ou condição. Ele também pode oferecer comandos para que o usuário possa ter uma maneira de agir facilmente. A barra de informações é um controle de shell padrão. Evite criar o seu próprio, que agirá e parecerá inconsistente com outros no IDE. Consulte Barras de informações para obter detalhes de implementação e diretrizes de uso.

Embedded infobar

Uma barra de informações incorporada em uma janela de documento, alertando o usuário de que o IDE está no modo de depuração histórica e o editor não responderá da mesma maneira que no modo de depuração padrão.

Alterações do cursor do mouse

Ao alterar o cursor do mouse, use cores vinculadas ao serviço VSColor e que já estejam associadas ao cursor. As alterações de cursor podem ser usadas para indicar uma operação em andamento, bem como zonas de impacto em que o usuário está passando o mouse sobre um destino que pode ser arrastado, solto ou usado para selecionar um objeto.

Use o cursor ocupado/aguardado do mouse somente quando todo o tempo de CPU disponível deve ser reservado para uma operação, impedindo que o usuário expresse qualquer entrada adicional. Na maioria dos casos com aplicativos bem escritos usando multithreading, os momentos em que os usuários são impedidos de fazer outras operações devem ser raros.

Lembre-se de que as alterações de cursor são úteis como uma indicação redundante para informações apresentadas em outro lugar. Não confie em uma mudança de cursor como a única maneira de se comunicar com o usuário, especialmente ao tentar transmitir algo que é crítico que o usuário deve abordar.

Indicadores de progresso

Os indicadores de progresso são importantes para dar feedback ao usuário durante processos que levam mais de alguns segundos para serem concluídos. Os indicadores de progresso podem ser mostrados no local (perto do ponto de inicialização da ação em andamento), em uma barra de status incorporada, em uma caixa de diálogo modal ou na barra de status do Visual Studio. Siga as orientações nos indicadores de progresso quanto ao seu uso e implementação.

Janela Notificações do Visual Studio

A janela Notificações do Visual Studio notifica os desenvolvedores sobre licenciamento, ambiente (Visual Studio), extensões e atualizações. Os usuários podem descartar notificações individuais ou podem optar por ignorar certos tipos de notificações. A lista de notificações ignoradas é gerenciada em uma página Opções de Ferramentas>.

A janela Notificações não está extensível no momento.

Visual Studio Notifications window

Janela da ferramenta Notificações do Visual Studio

Lista de erros

Uma notificação dentro da lista de erros indica erros e avisos que ocorreram durante a compilação e/ou o processo de compilação e permite que o usuário navegue no código para esse erro de código específico.

Error list

Lista de erros no Visual Studio

Barras de status incorporadas

Como a barra de status do IDE é dinâmica, com seu contexto de região do cliente definido para a janela do documento ativo e informações atualizadas sobre o contexto do usuário e/ou respostas do sistema, é difícil manter uma exibição contínua de informações ou fornecer status em processos assíncronos de longo prazo. Por exemplo, a barra de status do IDE não é apropriada para notificações de resultados de execução de teste para várias execuções e/ou seleções de itens imediatamente acionáveis. É importante manter essas informações de status no contexto do documento ou da janela de ferramentas onde o usuário faz uma seleção ou inicia um processo.

Embedded status bar

Barra de status incorporada no Visual Studio

Notificações da bandeja do Windows

A área de notificação do Windows fica ao lado do relógio do sistema na barra de tarefas do Windows. Muitos utilitários e componentes de software fornecem ícones nessa área para que o usuário possa obter um menu de contexto para tarefas em todo o sistema, como alterar a resolução da tela ou obter atualizações de software.

As notificações no nível do ambiente devem aparecer no hub de Notificações do Visual Studio, não na área de notificação do Windows.

Bolhas de notificação

As bolhas de notificação podem aparecer como informativas em um editor/designer ou como parte da área de Notificação do Windows. O usuário percebe essas bolhas como problemas que podem ser resolvidos posteriormente, o que é um benefício para notificações não críticas. Bolhas são inadequadas para informações críticas que o usuário deve resolver imediatamente. Se você usar bolhas de notificação no Visual Studio, siga as diretrizes da área de trabalho do Windows para bolhas de notificação.

Notification bubble

Bolha de notificação na área de notificação do Windows usada para Visual Studio

Indicadores de progresso

Os indicadores de progresso são uma parte importante de um sistema de notificação para dar feedback ao usuário. Eles informam ao usuário quando os processos e operações serão concluídos. Os tipos de indicadores familiares incluem barras de progresso, cursores giratórios e ícones animados. O tipo e o posicionamento de um indicador de progresso dependem do contexto, incluindo o que está sendo relatado e quanto tempo o processo ou operação levará para ser concluído.

Fatores

Para determinar qual tipo de indicador é apropriado, você precisa determinar os seguintes fatores.

  1. Tempo: tempo que a operação levará

  2. Modalidade: se a operação é modal para o ambiente (bloqueia a interface do usuário até que o processo seja concluído)

  3. Persistente/Transitório: se o resultado final do progresso precisa ser relatado e/ou visível em um momento posterior

  4. Determinado/Indeterminado: se o tempo de término e o progresso da operação podem ser calculados

  5. Local gráfico/textual: se o progresso ou o processo é capturado embutido, no corpo de uma mensagem ou em um controle específico, como o controle Tree

  6. Proximidade: se o progresso deve estar próximo da interface do usuário à qual está relacionado. (Por exemplo, ele pode estar na barra de status, que pode estar longe, ou tem que estar perto do botão que iniciou o processo?)

Progresso determinado

Tipo de progresso Quando e como usar Observações
Barra de progresso (determinada) Duração prevista de >5 segundos.

Pode incluir descrição textual dos detalhes do processo.
NÃO incorpore texto na animação.
Barra de informações Mensagens associadas à interface do usuário contextual. Consulte Barras de informações.

Pode incluir descrição textual dos detalhes do processo.
NÃO use várias barras de informações quando precisar indicar vários processos. Em vez disso, use barras de progresso empilhadas.
Janela de saída Notificação transitória: processo no nível do aplicativo do qual o usuário deseja revisar os detalhes após a conclusão. NÃO use se o usuário precisar consultar os dados mais tarde.
Arquivo de log Emparelhado com notificação intransiente nos casos em que é importante salvar detalhes após a conclusão.
Barra de Status Notificação transitória: processo no nível do aplicativo do qual o usuário não precisará de detalhes após a conclusão.

Inclui uma barra de progresso incorporada.

Pode incluir descrição textual dos detalhes do processo.

Progresso indeterminado

Tipo de progresso Quando e como usar Observações
Barra de progresso (indeterminada) Duração prevista de >5 segundos.

Pode incluir descrição textual dos detalhes do processo.
NÃO incorpore texto na animação.
Formigas (pontos horizontais animados) Ida e volta ao servidor.

Colocado próximo ao ponto de contexto na parte superior do contêiner pai.
NÃO use se não for parente por contêiner inteiro.
Spinner (anel de progresso) Processo associado à interface do usuário contextual ou onde o espaço é uma consideração.

Pode incluir descrição textual dos detalhes do processo.
Barra de informações Mensagens associadas à interface do usuário contextual. Consulte Barras de informações. NÃO use várias barras de informações quando precisar indicar vários processos. Em vez disso, use barras de progresso empilhadas.
Janela de saída Notificação transitória: processo no nível do aplicativo do qual o usuário desejará revisar os detalhes após a conclusão. NÃO use para informações que precisam persistir entre sessões.
Arquivo de log Emparelhado com notificação intransiente nos casos em que é importante salvar detalhes após a conclusão.
Barra de Status Notificação transitória: processo no nível do aplicativo do qual o usuário não precisará de detalhes após a conclusão.

Inclui barra de progresso incorporada.

Pode incluir descrição textual dos detalhes do processo.

Tipos de indicadores de progresso

Barras de progresso

Indeterminado

Indeterminate progress bar

Barra de progresso indeterminado

"Indeterminado" significa que o progresso global de uma operação ou processo não pode ser determinado. Use barras de progresso indeterminado para operações que exigem uma quantidade ilimitada de tempo ou que acessam um número desconhecido de objetos. Use uma descrição textual para acompanhar o que está acontecendo. Use tempos limite para dar limites a operações baseadas em tempo. As barras de progresso indeterminado usam animações para mostrar que o progresso está sendo feito, mas não fornecem outras informações. Não escolha uma barra de progresso indeterminado com base apenas na possível falta de precisão.

Determinado

Determinate progress bar

Barra de progresso determinado

"Determinado" significa que uma operação ou processo requer uma quantidade limitada de tempo, mesmo que essa quantidade de tempo não possa ser prevista com precisão. Indique claramente a conclusão. Não deixe uma barra de progresso ir para 100 por cento, a menos que a operação tenha sido concluída. A animação da barra de progresso determinado se move da esquerda para a direita de 0 a 100%.

Nunca mova o indicador de progresso para trás durante uma operação. A barra deve avançar de forma constante quando a operação começa e atingir 100% quando termina. O objetivo da barra de progresso é dar ao usuário uma ideia de quanto tempo toda a operação leva, independentemente de quantas etapas estão envolvidas.

Relatórios simultâneos (barras de progresso empilhadas)

Se uma operação demorar muito tempo - talvez vários minutos - então duas barras de progresso podem ser usadas, uma que mostra o progresso geral de uma operação e outra para a progressão da etapa atual. Por exemplo, se um programa de instalação estiver copiando muitos arquivos, uma barra de progresso poderá ser usada para indicar quanto tempo todo o processo levará, enquanto uma segunda poderá indicar qual porcentagem do arquivo ou diretório atual está sendo copiado. Não relate mais de cinco operações ou processos simultâneos usando barras de progresso empilhadas. Se você tiver mais de cinco operações ou processos simultâneos para relatar, use uma caixa de diálogo modal com um botão Cancelar e relate os detalhes do progresso à Janela de saída.

Descrições textuais

Use uma descrição textual para acompanhar o que está acontecendo e o tempo estimado para conclusão. Se for impossível determinar quanto tempo uma operação levará, uma escolha melhor para dar feedback pode ser um ícone animado em vez de uma barra de progresso.

Visual Studio fornece uma barra de progresso padrão na barra de status que pode ser usada por qualquer produto integrado ao Visual Studio. Para descrições textuais do que está acontecendo enquanto a barra de progresso é animada, o texto da barra de status pode ser atualizado.

Outros indicadores de progresso

Formigas (pontos horizontais animados)

Progress ants

"Formigas", pontos horizontais animados, fornecem uma referência visual para um processo de servidor de ida e volta indeterminado.

Spinner (anel de progresso)

Progress spinner

O spinner (também conhecido como "anel de progresso") é um indicador de progresso indeterminado usado principalmente em relação à interface do usuário contextual. Exiba um spinner próximo ao conteúdo relacionado, como um cabeçalho de categoria textual, mensagens ou controle.

Feedback do cursor

Para operações que levam entre 2 e 7 segundos, forneça feedback do cursor. Normalmente, isso significa usar o cursor de espera fornecido pelo sistema operacional. Para obter orientação, consulte o artigo do MSDN Cursors.Wait Property.

Locais dos indicadores de progresso

Barra de Status

A barra de status dá ao seu aplicativo um local para exibir mensagens e informações úteis para o usuário sem interromper o trabalho do usuário. Normalmente, exibido na parte inferior de uma janela, o status do progresso será um painel de dicas de ferramenta que inclui uma mensagem sobre a medida do progresso em combinação com um indicador da barra de progresso.

Status bar with progress bar

Barra de status com barra de progresso

Status bar with messaging

Barra de status com descrição textual

Barra de informações

Semelhante à barra de status, a barra de informações fornece notificação contextual e mensagens, que também podem ser emparelhadas com indicadores de progresso indeterminados, como a barra de progresso ou o spinner. A barra de informações não deve fornecer progresso de nível granular ou indicação de progresso determinado. Consulte Barras de informações.

Infobar with progress bar and messaging

Barra de informações com barra de progresso e descrição textual

Infobar inside a window

Embutido

A indicação de progresso em linha pode ser representada por qualquer um dos tipos de carregador de progresso. Normalmente, o indicador de progresso é emparelhado com mensagens, mas isso não é um requisito.

Inline progress spinner

Spinner combinado com descrição textual

Inline stacked progress bars

Determinadas barras de progresso empilhadas

Inline progress messaging

Texto embutido do Gerenciador de Servidores: Atualizando...

Janelas da ferramenta

A indicação de progresso global é representada por uma barra de progresso indeterminado posicionada diretamente abaixo da barra de ferramentas.

Global indeterminate progress bar

Barra de progresso indeterminado global do Team Explorer

Diálogos

As caixas de diálogo podem conter qualquer um dos tipos de carregador de progresso. Os indicadores de progresso podem ser emparelhados com mensagens, bem como combinados com vários níveis de indicação de progresso para representar processos granulares e sub-processos.

Dialog with multiple progress indicator types

Caixa de diálogo do Visual Studio com processos simultâneos e vários tipos de indicador de progresso

Dialog with progress loader and messaging

Caixa de diálogo do Visual Studio com carregador de progresso e comando embutido de mensagens

Documente bem

O poço do documento pode exibir vários tipos de carregador de progresso em combinação com controles.

Progress messaging in document well

Barra de progresso indeterminado abaixo da barra de ferramentas

Janela de saída

A janela Saída é apropriada para lidar com a progressão do processo e o status do progresso contínuo por meio de mensagens textuais embutidas. Você deve usar a barra de status junto com qualquer relatório de progresso da janela de saída.

Progress messaging in Output Window

Janela de saída com status do processo contínuo e mensagens de espera

Barras de informações

As barras de informações fornecem ao usuário um indicador próximo ao seu ponto de atenção e o uso do controle de barra de informações compartilhado garante consistência na aparência visual e na interação.

Infobar

Barras de informações no Visual Studio

Usos apropriados para uma barra de informações

  • Para dar ao usuário uma mensagem sem bloqueio, mas importante e relevante para o contexto atual

  • Para indicar que a interface do usuário está em um determinado estado ou condição que carrega algumas implicações de interação, como depuração histórica

  • Para notificar o usuário de que o sistema detectou problemas, como quando uma extensão está causando problemas de desempenho

  • Para fornecer ao usuário uma maneira de executar ações facilmente, como quando o editor detecta que um arquivo tem guias e espaços mistos

O que fazer:
  • Mantenha o texto da mensagem da barra de informações curto e direto ao ponto.

  • Mantenha o texto em links e botões sucintos.

  • Certifique-se de que as opções de "ação" fornecidas aos usuários sejam mínimas, mostrando apenas as ações necessárias.

O que não fazer:
  • Use uma barra de informações para oferecer comandos padrão que devem ser colocados em uma barra de ferramentas.

  • Use uma barra de informações no lugar de uma caixa de diálogo modal.

  • Crie uma mensagem flutuante fora de uma janela.

  • Use várias barras de informações em vários locais dentro da mesma janela.

Várias barras de informações podem ser exibidas ao mesmo tempo?

Sim, várias barras de informações podem ser exibidas ao mesmo tempo. Eles serão exibidos por ordem de chegada, com a primeira barra de informações mostrada na parte superior e as barras de informações adicionais mostradas abaixo.

O usuário verá um máximo de três barras de informações por vez, após o que, se mais barras de informações estiverem disponíveis, a região da barra de informações se tornará rolável.

Criando uma barra de informações

A barra de informações tem quatro seções, da esquerda para a direita:

  • Ícone: é onde você adicionaria qualquer ícone que gostaria de exibir para a barra de informações, como um ícone de aviso.

  • Texto: Você pode adicionar texto para descrever o cenário/situação em que o usuário está, juntamente com links dentro do texto, se necessário. Lembre-se de manter o texto sucinto.

  • Ações: Esta seção deve conter links e botões para ações que o usuário pode executar em sua barra de informações.

  • Botão Fechar: A última seção à direita pode ter um botão Fechar.

Criando uma barra de informações padrão em código gerenciado

A classe InfoBarModel pode ser usada para criar uma fonte de dados para uma barra de informações. Use um destes quatro construtores:

public InfoBarModel(IEnumerable<IVsInfoBarTextSpan> textSpans, ImageMoniker image = default(ImageMoniker), bool isCloseButtonVisible = true);

public InfoBarModel(string text, ImageMoniker image = default(ImageMoniker), bool isCloseButtonVisible = true);

public InfoBarModel(IEnumerable<IVsInfoBarTextSpan> textSpans, IEnumerable<IVsInfoBarActionItem> actionItems, ImageMoniker image = default(ImageMoniker), bool isCloseButtonVisible = true);

public InfoBarModel(string text, IEnumerable<IVsInfoBarActionItem> actionItems, ImageMoniker image = default(ImageMoniker), bool isCloseButtonVisible = true);

Aqui está um exemplo que cria um InfoBarModel com algum texto com um hiperlink, um botão de ação e um ícone.

Infobar with hyperlink

var infoBar = new InfoBarModel(
    textSpans: new[]
    {
        new InfoBarTextSpan("This is a "),
        new InfoBarHyperlink("hyperlink"),
        new InfoBarTextSpan(" InfoBar.")
    },
    actionItems: new[]
    {
        new InfoBarButton("Click Me")
    },
    image: KnownMonikers.StatusInformation,
    isCloseButtonVisible: true);

Criando uma barra de informações padrão em código nativo

Implemente a interface IVsInfoBar para fornecer uma barra de informações a partir do código nativo.

public interface IVsInfoBar
{
    IVsInfoBarActionItemCollection ActionItems { get; }
    ImageMoniker Image { get; }
    bool IsCloseButtonVisible { get; }
    IVsInfoBarTextSpanCollection TextSpans { get; }
}

Obtendo uma UIElement da barra de informações de uma barra de informações

A implementação InfoBarModel ou IVsInfoBar são modelos de dados que devem ser transformados em um UIElement para serem mostrados na interface do usuário. Um UIElement pode ser recuperado com o serviço SVsInfoBarUIFactory/IVsInfoBarUIFactory.

private bool TryCreateInfoBarUI(IVsInfoBar infoBar, out IVsInfoBarUIElement uiElement)
{
    IVsInfoBarUIFactory infoBarUIFactory = serviceProvider.GetService(typeof(SVsInfoBarUIFactory)) as IVsInfoBarUIFactory;
    if (infoBarUIFactory == null)
    {
        uiElement = null;
        return false;
    }

    uiElement = infoBarUIFactory.CreateInfoBar(infoBar);
    return uiElement != null;
}

Posicionamento

As barras de informações podem ser mostradas em um ou mais dos seguintes locais:

  • Janelas da ferramenta

  • Dentro de uma guia de documento

Importante

É possível posicionar uma barra de informações para dar uma mensagem sobre o contexto global. Isso apareceria entre as barras de ferramentas e o documento bem. Isso não é recomendado porque causa problemas com "pulo e empurrão" do IDE e deve ser evitado, a menos que seja absolutamente necessário e apropriado.

Colocando uma barra de informações em um ToolWindowPane

O método ToolWindowPane.AddInfoBar(IVsInfoBar) pode ser usado para adicionar uma barra de informações a uma janela de ferramenta. Essa API pode adicionar uma IVsInfoBar (da qual InfoBarModel é uma implementação padrão) ou um IVsUIElement.

Colocando uma barra de informações em um documento ou não-ToolWindowPane

Para colocar uma barra de informações em qualquer IVsWindowFrame, use a propriedade VSFPROPID_InfoBarHost para obter o IVsInfoBarHost para o quadro e, em seguida, adicione a barra de informações UIElement.

private void AddInfoBar(IVsWindowFrame frame, IVsUIElement uiElement)
{
    IVsInfoBarHost infoBarHost;
    if (TryGetInfoBarHost(frame, out infoBarHost))
    {
        infoBarHost.AddInfoBar(uiElement);
    }
}
private bool TryGetInfoBarHost(IVsWindowFrame frame, out IVsInfoBarHost infoBarHost)
{
    object infoBarHostObj;
    if (ErrorHandler.Failed(frame.GetProperty((int)__VSFPROPID7.VSFPROPID_InfoBarHost, out infoBarHostObj)))
    {
        infoBarHost = null;
        return false;
    }

    infoBarHost = infoBarHostObj as IVsInfoBarHost;
    return infoBarHost != null;
}

Colocando uma barra de informações na janela principal

Para colocar uma barra de informações na janela principal, use o VSSPROPID_MainWindowInfoBarHost do serviço IVsShell para obter o IVsInfoBarHost da janela principal e, em seguida, adicione a barra de informações UIElement a ela.

Saberei quando o usuário executar uma ação na minha barra de informações?

Sim, retornaremos todas as ações do evento para o autor da barra de informações. Em seguida, cabe ao autor da barra de informações executar uma ação no IDE com base na seleção do usuário na barra de informações. As barras de informações serão removidas automaticamente do host cujo botão Fechar foi clicado, mas será necessário trabalho adicional se outras barras de informações precisarem ser removidas após o fechamento. A telemetria também precisará ser registrada de forma independente por cada barra de informações.

Recebendo eventos da barra de informações em um ToolWindowPane

ToolWindowPane tem dois eventos para barras de informações. O evento InfoBarClosed é gerado quando uma barra de informações no ToolWindowPane é fechada. O evento InfoBarActionItemClicked é gerado quando um hiperlink ou botão dentro da barra de informações é clicado.

Recebendo eventos da barra de informações diretamente do UIElement

IVsInfoBarUIElement.Advise pode ser usado para assinar eventos diretamente do UIElement de uma barra de informações. A implementação de IVsInfoBarUIEvents permitirá que o autor receba eventos de fechamento e clique.

public interface IVsInfoBarUIEvents
{
    void OnActionItemClicked(IVsInfoBarUIElement infoBarUIElement, IVsInfoBarActionItem actionItem);
    void OnClosed(IVsInfoBarUIElement infoBarUIElement);
}

Validação de erro

Quando um usuário insere informações que não são aceitáveis, como quando um campo obrigatório é ignorado ou quando os dados são inseridos no formato incorreto, é melhor usar a validação de controle ou comentários perto do controle em vez de usar uma caixa de diálogo de erro pop-up de bloqueio.

Validação do campo

A validação de formulário e campo consiste em três componentes: um controle, um ícone e uma dica de ferramenta. Embora vários tipos de controles possam usar isso, uma caixa de texto será usada como exemplo.

Field validation (blank)

Se o campo for obrigatório, deve haver texto de marca d'água informando <Obrigatório> e o plano de fundo do campo deve ser amarelo claro (VSColor: ) e o primeiro plano deve ser cinza (VSColor: Environment.ControlEditRequiredBackgroundEnvironment.ControlEditRequiredHintText):

Field validation with

O programa pode determinar que o controle está em um estado de conteúdo inválido inserido quando o foco é movido para outro controle ou quando o usuário clica em um botão de confirmação [OK] ou quando o usuário salva o documento ou formulário.

Quando o estado de conteúdo inválido é determinado, um ícone aparece dentro do controle ou ao lado dele. Uma dica de ferramenta descrevendo o erro deve aparecer ao passar o mouse sobre o ícone ou o controle. Além disso, uma borda de 1 pixel deve aparecer ao redor do controle que está criando o estado inválido.

Field validation layout specifications

Especificações de layout para validação de campo

Variações aceitáveis para localização do ícone

Existem inúmeros casos únicos em que os usuários precisam ser informados sobre erros de validação. Considerando o tipo de controle e a configuração da interface do usuário, escolha o posicionamento do ícone apropriado à sua situação.

Acceptable locations for icon location

Variações aceitáveis para locais de ícones de validação de campo

Validação que requer uma viagem de ida e volta a um servidor ou conexão de rede

Em alguns casos, uma viagem de ida e volta ao servidor é necessária para verificar o conteúdo, e seria importante mostrar o progresso do usuário, verificado e estados de erro. A figura abaixo mostra um exemplo desse caso e a interface do usuário recomendada.

Validation involving a round trip to a server

Validação envolvendo uma viagem de ida e volta a um servidor

Observe que o espaço disponível adequado à direita do controle deve ser fornecido para acomodar o "Verificando..." e texto "Repetir".

Texto de aviso in-loco

Quando há espaço disponível para colocar a mensagem de erro perto do controle em um estado de erro, isso é preferível ao uso da dica de ferramenta sozinho.

In-place warning

Texto de aviso in-loco

Marcas d' água

Às vezes, um controle ou janela inteira está em um estado de erro. Nessa situação, use uma marca d'água para indicar o erro.

Watermark

Validação de campo de marca d'água