Publicado em C#, Programação, Uncategorized, WPF

Controlando vários botões com o mesmo evento numa aplicação C# WPF

Já tinha abordado este assunto no passado a respeito da criação do Jogo do Galo escrito em C++/Qt (ver aqui).

A ideia consiste em controlar vários botões com um único evento, como por exemplo num teclado numérico que serve para introduzir códigos de até seis algarismos.

mykeyboard

De forma a conseguir controlar todos os botões num único evento temos que executar duas tarefas.

Primeiro, ao nível do XAML, vamos identificar cada botão utilizando uma Tag e associar todos estes ao evento ‘Click=”Button_Click”‘.

...
<TextBox x:Name="display" Height="100"  Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" Margin="0,5,0,5" FontSize="72" />
<Button x:Name="b7" Content="7" Tag="7" Grid.Row="1" Grid.Column="0" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b8" Content="8" Tag="8" Grid.Row="1" Grid.Column="1" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b9" Content="9" Tag="9" Grid.Row="1" Grid.Column="2" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b4" Content="4" Tag="4" Grid.Row="2" Grid.Column="0" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b5" Content="5" Tag="5" Grid.Row="2" Grid.Column="1" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b6" Content="6" Tag="6" Grid.Row="2" Grid.Column="2" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b1" Content="1" Tag="1" Grid.Row="3" Grid.Column="0" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b2" Content="2" Tag="2" Grid.Row="3" Grid.Column="1" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b3" Content="3" Tag="3" Grid.Row="3" Grid.Column="2" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="b0" Content="0" Tag="0" Grid.Row="4" Grid.Column="0" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="bclear" Content="Clear" Tag="c" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" Width="Auto" Height="100" FontSize="48" Click="Button_Click" />
<Button x:Name="bcancel" Content="X" Tag="x" Grid.Row="5" Grid.Column="0" Width="100" Height="100" FontSize="72" Click="Button_Click" />
<Button x:Name="bok" Content="OK" Tag="ok" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="2" Width="Auto" Height="100" FontSize="48" Click="Button_Click" />

 

De seguida, implementamos o método ‘Click=”Button_Click”‘ de forma a, utilizando uma estrutura de decisão, dar funcionalidades específicas a cada uma das teclas.

private void Button_Click(object sender, RoutedEventArgs e)
{
    var buttonTag = ((Button)sender).Tag;
    string tag=buttonTag.ToString();
    switch(tag)
    {
        case "0":
        case "1":
        case "2":
        case "3":
        case "4":
        case "5":
        case "6":
        case "7":
        case "8":
        case "9":
            if(display.Text.Length<6)
                display.Text += tag;
            break;
        case "c":
            display.Text = "";
            break;
        case "ok":
            this.Close();
            break;
        case "x":
            display.Text = "";
            this.Close();
            break;
    }
}

Naturalmente existirão formas mais complexas de conseguir o mesmo efeito, mas esta é uma solução simples e de rápida implementação.

O Código pode ser descarregado aqui.

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s