Task Dialog

Presentes desde o Windows Vista, Task Dialogs são Message Box flexíveis onde é possível criar caixas de mensagem customizadas. Para fazer isso com código gerenciado basta usar o Windows API Code Pack for Microsoft .NET Framework descrito neste post.

Para começar vamos ver os detalhes da classe TaskDialog:

Vamos criar uma Task Dialog bem simples, contendo apenas Caption e Text:

if (TaskDialog.IsPlatformSupported)
{
    TaskDialog myDialog = new TaskDialog();
    myDialog.Caption = "Título";
    myDialog.Text = "Mensagem.";
    myDialog.StartupLocation =
        TaskDialogStartupLocation.CenterScreen;
    myDialog.Show();
}

Como podemos perceber, o primeiro passo é instanciar a classe TaskDialog, definir as propriedades necessárias e por fim chamar o método Show(). A propriedade Caption recebe uma string que determina o título e a propriedate Text também recebe uma string que determina a mensagem da Task Dialog. A propriedade IsPlatformSupported informa se Task Dialog é suportada no sistema operacional. A propriedade StartupLocation permite definir a posição da Task Dialog.

Com a propriedade InstructionText definimos a finalidade da Task Dialog e a propriedade Cancelable define se a Task Dialog pode ser cancelada ou não, definindo para true um botão “Close” é inserido no canto superior direito.

myDialog.InstructionText = "Finalidade da Task Dialog";
myDialog.Cancelable = true;

É possível adicionar uma mensagem que pode ficar oculta com botões para mostrar e esconder a mesma, para isso usamos as seguintes propriedades:

  • DetailsExpanded – Define se a mensagem fica ou não oculta, sendo que o padrão é false.
  • DetailsExpandedText – Define a mensagem.
  • DetailsCollapsedLabel – É o texto que fica no botão para mostrar a mensagem.
  • DetailsExpandedLabel – É o texto que fica no botão para ocultar a mensagem.
  • ExpansionMode – Determina o local da mensagem oculta, podendo ser acima ou abaixo dos botões de mostrar / ocultar a mensagem.
myDialog.DetailsExpanded = true;
myDialog.DetailsExpandedText = "Detalhes...";
myDialog.DetailsCollapsedLabel = "Mostrar";
myDialog.DetailsExpandedLabel = "Ocultar";
myDialog.ExpansionMode =
    TaskDialogExpandedDetailsLocation.ExpandContent;

Pode-se adicionar controles, sendo eles:

  • StandardButtons
    –> Cancel
    –> Close
    –> No
    –> Ok
    –> Retry
    –> Yes
  • Buttons (Customizados)
  • CommandLinks
  • RadioButtons

Usando StandardButtons, podemos usar a lógica OR para os botões adicionados e atribuir o método Show() da nossa Task Dialog à enumeração TaskDialogResult para capturarmos o resultado.

myDialog.StandardButtons =
    TaskDialogStandardButtons.Yes |
    TaskDialogStandardButtons.No |
    TaskDialogStandardButtons.Cancel;
    TaskDialogResult result = myDialog.Show();

Em certas situações os StandardsButtons não suprem nossas necessidades, nesses casos usamos os Buttons (Customizados). Instanciamos a classe TaskDialogButton e definimos as propriedades que se fizerem necessárias, feito isso, é preciso definir um Delegate para o evento Click dos respectivos botões e, por fim, adicionar os botões em nossa Task Dialog.

TaskDialogButton continuar = new TaskDialogButton();
continuar.Default = true;
continuar.Text = "Continuar";
continuar.Click += new EventHandler(continuar_Click);

TaskDialogButton parar = new TaskDialogButton();
parar.Default = false;
parar.Text = "Parar";
parar.Click += new EventHandler(parar_Click);

myDialog.Controls.Add(continuar);
myDialog.Controls.Add(parar);

Ao invés de Buttons podemos usar os CommandLinks, cuja configuração é praticamente a mesma dos Buttons.

TaskDialogCommandLink continuar = new TaskDialogCommandLink();
continuar.Default = true;
continuar.Text = "Continuar";
continuar.Instruction = "Continua a operação.";
continuar.Click +=new EventHandler(continuar_Click);

TaskDialogCommandLink parar = new TaskDialogCommandLink();
parar.Default = false;
parar.Text = "Parar";
parar.Instruction = "Para a operação.";
parar.Click += new EventHandler(parar_Click);

myDialog.Controls.Add(continuar);
myDialog.Controls.Add(parar);

Também podemos colocar RadioButtons que, semelhante aos CommandLinks, a configuração é praticamente a mesma dos Buttons.

TaskDialogRadioButton continuar = new TaskDialogRadioButton();
continuar.Default = true;
continuar.Text = "Continuar";

TaskDialogRadioButton parar = new TaskDialogRadioButton();
parar.Default = false;
parar.Text = "Parar";

myDialog.Controls.Add(continuar);
myDialog.Controls.Add(parar);

Como na Message Box, conseguimos adicionar icone na Task Dialog utilizando a propriedade Icon.
Podemos escolher entre os seguintes icones:

  • Error
  • Information
  • Shield
  • Warning

Podemos adicionar controles ao rodapé usando as propriedades:

  • FooterCheckBoxCheccked – Determina se o checkbox no rodapé inicia selecionado ou não.
  • FooterCheckBoxText – Texto do checkbox no rodapé.
  • FooterIcon – Icone no rodapé.
  • FooterText – Texto no rodapé.
myDialog.FooterCheckBoxChecked = false;
myDialog.FooterCheckBoxText = "Tomar essa decisão para todos.";
myDialog.FooterIcon = TaskDialogStandardIcon.Warning;
myDialog.FooterText = "Texto de rodapé";

Conseguimos adicionar hyperlinks ao rodapé, o que é preciso fazer é definir a propriedade HyperlinksEnable como true, adicionar o link dentro da tag <a href> , definir um delegate para o evento HyperlinkClick e codificá-lo.

myDialog.HyperlinksEnabled = true;
myDialog.FooterText =
    "Para maiores detalhes visite nosso site:
    <a href=\"http://www.microsoft.com.br\">Microsoft</a>";
myDialog.HyperlinkClick += new
    EventHandler<TaskDialogHyperlinkClickedEventArgs>
    (myDialog_HyperlinkClick);

void myDialog_HyperlinkClick(object sender,
    TaskDialogHyperlinkClickedEventArgs e)
{
    Process.Start(e.LinkText);
}

É possível adicionar ProgressBar para mostrar ao usuário o andamento de uma operação. É preciso apenas instanciar a classe TaskDialogProgressBar e atribuí-la à propriedade ProgressBar. É possível também definir o estado do andamento da operação, são eles:

  • Error
  • Marquee
  • Normal
  • Paused
TaskDialogProgressBar progressBar =
    new TaskDialogProgressBar();
progressBar.Minimum = 0;
progressBar.Maximum = 100;
progressBar.Value = 25;
progressBar.State = TaskDialogProgressBarState.Normal;
myDialog.ProgressBar = progressBar;

Anúncios

Tags: ,

5 Respostas to “Task Dialog”

  1. Ernane Ribas Says:

    Olá Juliano , tudo bem?
    Estou tendo um problema com a propriedade Icon do TaskDialog. Ele não aparece pra mim o ícone na caixa de mensagem, e eu segui o que você postou aqui no blog, será que você poderia me dar um help?
    Muito boa explicação, era o que eu realmente precisava.

    • julianoaece Says:

      Olá Ernane,

      No post esqueci do código que define o ícone da Task Dialog, apenas coloquei o código que define o ícone no rodapé.

      Para definir o ícone da Task Dialog basta usarmos a propriedade MainIcon:

      dialog.MainIcon = TaskDialogStandardIcon.Error;
      
  2. Ailton Says:

    Olá Juliano, td em paz?
    Ai veja só, quando defini o processo de CONTINUAR e PARAR fica uma underline vermelha na variavel CONTINUAR_CLICK e outra no PARAR_CLICK assim:

    varContinuar.Click += new EventHandler(varContinuar_Click);

    E precisso instanciala ou falta algo? Fico no aguardo!

    Feliz 2014!!!

  3. Ailton Says:

    Veja só consegui tirar o underline vermelha criando uma declaração como vc disse, na verdade bastei copiar do meu button q tenho no form e declarar, fiz assim:

    private void varContinuar_Click(object sender, EventArgs e)
    {
    “Só que aki não sei o q coloco para fechar a caixa de msg, pois quando kiko não fecha e não faz nada pode me ajudar aki?”
    }

    Como pode perceber resolvi um e surgiu outro X-D?
    Fico no aguardo!

    • julianoaece Says:

      Olá Ailton,

      Depois que o usuário clica no botão a caixa de diálogo é automaticamente fechada. Veja o exemplo abaixo:

      continuar.Click += new EventHandler(continuar_Click);

      void continuar_Click(object sender, EventArgs e)
      {
      // implementação

      // depois de executado, automaticamente a caixa de dialogo é fechada
      }

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: