Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

122
Unidade II
Unidade II
3 ELEMENTOS GRÁFICOS DE ESCOLHA E ORGANIZAÇÃO
Elementos básicos como Forms, MessageBox, Label, GroupBox, Panel e TextBox são os alicerces sobre 
os quais as interfaces são construídas. Por outro lado, elementos gráficos de escolha e organização – como 
caixas de opção, seleção e combinação, calendários, seletores de data, menus e caixas de listagem, assim 
como controles de abas e visualizações em árvore e lista – são projetados especificamente para facilitar 
a navegação e a tomada de decisões pelo usuário.
Em outras palavras, enquanto os elementos básicos são indispensáveis para estruturar a interface, 
apresentar informações e receber inputs, elementos gráficos de escolha e organização melhoram a 
interatividade e a eficiência do usuário ao navegar e tomar decisões dentro de uma interface. Ambos os 
elementos trabalham em conjunto para criar uma experiência harmoniosa, intuitiva e eficiente, sendo 
cada um deles crucial para diferentes aspectos da interface do usuário.
3.1 Elementos gráficos de escolha: caixas de opção, de seleção e 
de combinação
No mundo digital, a interação do usuário com as interfaces gráficas é fundamental para uma 
experiência eficiente e agradável. Como mencionamos, elementos gráficos de escolha e ordenamento 
desempenham papel crucial nesse contato, facilitando a navegação e a tomada de decisão. Caixas 
de opção – conhecidas também como Radio Buttons – permitem ao usuário selecionar uma única 
opção de um conjunto e são visualmente representadas por um pequeno círculo com um ponto 
indicativo de seleção quando ativado. São ideais quando a escolha é exclusiva, garantindo que 
apenas uma opção seja escolhida entre várias disponíveis.
Apenas um grupo de Radio Buttons pode ser selecionado por vez – propriedade que os torna 
ideais quando é necessário forçar o usuário a escolher apenas uma opção de um conjunto, como em 
formulários de pesquisa, configurações de preferências e questionários. Quando um usuário seleciona 
um Radio Button, qualquer outro previamente selecionado no mesmo grupo é automaticamente 
desmarcado. Para agrupar Radio Buttons logicamente, os desenvolvedores normalmente os colocam 
dentro de um container de controle, como um GroupBox ou um Panel. Isso não apenas agrupa os botões 
visualmente, mas também os conecta logicamente, de modo que a seleção de um Radio Button dentro 
de um container automaticamente desseleciona os outros no mesmo grupo.
Essa abordagem de agrupamento facilita a organização da interface do usuário e a implementação da 
lógica de escolha exclusiva. Implementar um Radio Button em C# com Windows Forms é relativamente 
simples: depois de arrastar o controle Radio Button para o Form no designer do Visual Studio, o 
123
PROGRAMAÇÃO ORIENTADA A OBJETOS II
desenvolvedor pode personalizar suas características com a janela de propriedades, incluindo o texto 
que aparece ao lado do botão, fonte, cor, entre outras características visuais.
Além disso, é possível controlar o comportamento do Radio Button através de eventos, sendo o mais 
comum o CheckedChanged, acionado sempre que o estado de seleção do Radio Button muda, permitindo 
aos desenvolvedores executar ações específicas quando um Radio Button é selecionado ou desmarcado. 
A programação de Radio Buttons em C# no Windows Forms também envolve considerações  de 
acessibilidade e usabilidade; por exemplo, é importante garantir que os Radio Buttons sejam claramente 
rotulados e adequadamente espaçados para facilitar a interação dos usuários, incluindo quem utiliza 
leitores de tela ou navega principalmente pelo teclado.
A seguir, uma lista não exaustiva de propriedades e eventos.
Quadro 9 – Radio Button: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
Checked Indica se o Radio Button está selecionado
Text Indica o texto associado ao Radio Button
Enabled Define se o Radio Button está habilitado
Visible Define se o Radio Button está visível
AutoSize Determina se o Radio Button é automaticamente 
redimensionado para exibir todo seu conteúdo
Evento
CheckedChanged Ocorre quando o valor da propriedade Checked é alterado
Click Ocorre quando o Radio Button é clicado
GotFocus Ocorre quando o Radio Button recebe foco
LostFocus Ocorre quando o Radio Button perde o foco
Em contraste, caixas de seleção (CheckBoxes) permitem múltiplas seleções dentro de um grupo 
de opções. Diferentes dos Radio Buttons – restritos a uma única escolha dentro de um grupo –, as 
CheckBoxes permitem que os usuários selecionem várias opções independentemente, tornando‑as ideais 
quando for necessário coletar uma variedade de preferências ou valores.
Visualmente, uma CheckBox no ambiente Windows Forms é representada por um pequeno quadrado 
que pode ser marcado ou desmarcado com um clique; quando marcada, geralmente exibe um sinal de 
visto, indicando que a opção associada foi selecionada. Essa simplicidade visual facilita o entendimento 
e a interação por parte do usuário, tornando as CheckBoxes uma escolha popular para formulários, 
configurações e listas de verificação.
A implementação de uma CheckBox em C# com Windows Forms é direta e intuitiva. Ao desenvolver 
uma aplicação, o programador pode simplesmente arrastar e soltar o controle CheckBox no Form através 
do designer do Visual Studio. Cada CheckBox pode ser personalizada em termos de texto, fonte, cor e 
outras propriedades estéticas através da janela de propriedades, o que é crucial para garantir que a 
interface do usuário esteja alinhada com o design e a usabilidade desejados.
124
Unidade II
Assim como no Radio Button, um aspecto importante da programação de CheckBoxes é a manipulação 
de eventos. O evento mais comum associado a uma CheckBox é o CheckedChanged, acionado sempre 
que o estado de seleção da CheckBox muda. Isso permite que os desenvolvedores executem código 
específico quando uma CheckBox é marcada ou desmarcada, facilitando a interação dinâmica com 
o usuário e a coleta de dados de entrada. O uso de CheckBoxes em interfaces gráficas requer atenção a 
acessibilidade e usabilidade.
O quadro 10 mostra diversas propriedades e eventos interessantes. É importante que as CheckBoxes 
sejam rotuladas e organizadas de maneira lógica, para que os usuários possam entender facilmente 
as opções disponíveis e fazer suas escolhas sem confusão. Isso é relevante em interfaces com um 
grande número de CheckBoxes, onde organização e clareza são fundamentais para evitar sobrecarga 
de informações.
Quadro 10 – CheckBox: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
Checked Indica se a CheckBox está selecionada
Enabled Define se a CheckBox está habilitada
Visible Define se a CheckBox está visível
CheckState Indica o estado da CheckBox (Checked, Unchecked, 
Indeterminate)
Text Indica o texto associado à CheckBox
AutoSize Determina se a CheckBox é automaticamente 
redimensionada para exibir todo seu conteúdo
Evento
Click Ocorre quando a CheckBox é clicada
CheckedChanged Ocorre quando o valor da propriedade Checked é 
alterado
GotFocus Ocorre quando a CheckBox recebe foco
LostFocus Ocorre quando a CheckBox perde o foco
Já as caixas de combinação, ou ComboBoxes, associam uma caixa de texto com uma lista suspensa, 
oferecendo ao usuário uma lista de opções predefinidas enquanto permite a entrada de texto 
personalizado. Elas representam um controle híbrido que combina as funcionalidades de uma caixa 
de texto com uma lista suspensa, oferecendo uma interface de usuário rica e flexível para selecionar 
dados. Essa versatilidade as torna uma ferramenta ideal quando o conjunto de dados é conhecido – mas 
entradas não previstas também são possíveis.
A implementação de uma ComboBox é facilitada pelo ambiente de desenvolvimento do Visual 
Studio. Programadores podem simplesmente arrastar o controle ComboBox para o formulário e começar 
a personalizá‑lo de acordo com as necessidades da aplicação. As opções podem ser adicionadas à lista 
de uma ComboBox programática_MouseUp(object sender, MouseEventArgs e)
8. {
9. // Voltar para a imagem original quando o botão for solto
10. dadoBotao.BackgroundImage = Properties.Resources.Dado;
11. }
Figura 57 – Criando feedback visual do clique do mouse trocando imagens de fundo do botão
Adicionalmente, a imagem de fundo do formulário (BackGroundImage) contém uma ilustração 
inicial dos mosqueteiros sentados à mesa (figura 55). Para dar mais movimento ao jogo, essa imagem 
será trocada dinamicamente por cenas especiais, quando o jogador estiver em certos momentos: 
tributo ao bispo e duelos (neste caso com seis imagens para simular pares de disputa entre os quatro 
mosqueteiros), audiência com o rei e os desfechos: reconhecimento da corte, desprezo da corte e 
condecoração real. O objetivo das cenas é referenciar a atmosfera do jogo, aumentando a imersividade 
de forma dinâmica.
153
PROGRAMAÇÃO ORIENTADA A OBJETOS II
154
Unidade II
Figura 58 – Cenas para imagem de fundo do formulário (respectivamente: tributo ao bispo, 
seis pares de mosqueteiros em duelos, audiência com o rei, reconhecimento da corte, desprezo da corte e condecoração real). 
Imagens produzidas com a tecnologia DALL‑E, ferramenta de inteligência artificial desenvolvida pela OpenAI
Antes de iniciar a programação de um jogo em Windows Forms com C#, diversas etapas cruciais 
devem ser contempladas para assegurar o sucesso e a eficácia do projeto. Essas atividades, que antecedem 
a programação, são fundamentais para estabelecer uma base sólida no desenvolvimento do jogo e 
incluem criação de roteiro, design de cenas, confecção de personagens, planejamento de jogabilidade 
e definição de elementos artísticos e sonoros.
Criar o roteiro é uma das primeiras e mais importantes etapas no desenvolvimento de um jogo. 
Aqui a história é concebida, incluindo trama principal, arco dos personagens, diálogos e sequências de 
eventos. Esse roteiro serve como espinha dorsal de todo o projeto, orientando as decisões de design e 
desenvolvimento subsequentes. Um roteiro bem elaborado contribui para uma experiência envolvente 
e memorável, essencial para manter o interesse dos jogadores.
Design de cenas é outro aspecto crítico, pois planeja visualmente os ambientes onde o jogo se 
desenrola, incluindo criar esboços e modelos para cada localidade e garantindo que cada cena contribua 
para a atmosfera geral e a narrativa. Um design eficaz de cenas ajuda a criar um mundo imersivo que 
captura a imaginação dos jogadores.
155
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Planejar a jogabilidade é igualmente importante, porque se define como os jogadores interagem com 
o produto, incluindo mecânicas, controles, desafios e recompensas. Uma jogabilidade bem planejada é 
essencial para garantir que o jogo seja divertido, desafiador e recompensador, mantendo todos engajados 
e interessados. O jogo apresentado neste livro‑texto usou controles simples (labels, botões etc.) para 
garantir certo nível de imersão e jogabilidade, respeitando suas regras e mecânicas. Uma proposta mais 
sofisticada poderia incluir menus, comboboxes, MDIs, animações e som. O fato é que, com os diversos 
controles do Windows Forms, são possíveis várias criações na interface do jogo, como estas:
• O tabuleiro poderia ser implementado usando um Panel com múltiplos Panels menores dentro 
dele; cada um indicaria uma casa do tabuleiro. A personalização deles permitiria representar as 
diferentes características de cada casa, como espaços de eventos e duelos de honra. Cores e 
texturas podem ser aplicadas para diferenciar cada tipo de espaço.
• Para as cartas de evento, uma alternativa seria usar um FlowLayoutPanel ou um 
TableLayoutPanel  –  controles que podem organizar dinamicamente os elementos que 
representam as cartas. Cada carta pode ser um Panel com texto e cores específicas para indicar 
os diferentes eventos, o que permite uma representação visual das cartas sem uso direto de 
PictureBoxes ou Labels.
• A roleta de duelo pode ser criada com uma série de Radio Buttons dispostos em um círculo, 
cada um representando uma possível saída do duelo. Quando o jogador clica em um botão para 
girar a roleta, um mecanismo de seleção aleatória pode destacar o Radio Button correspondente 
ao resultado.
• Para gerenciar a pilha de cartas de evento, pode‑se usar um controle como ListBox ou ListView, 
permitindo aos jogadores visualizar as cartas disponíveis ou já utilizadas.
• O dado pode ser representado por um ComboBox – controle preenchível com números de um a 
seis, simulando as faces de um dado. A seleção de um número da ComboBox de forma aleatória, 
possivelmente acionada por um temporizador (timer), pode determinar o número de casas pelas 
quais um jogador move sua peça.
• O tabuleiro também pode ser exibido em uma janela‑filha MDI, que pode ser visualmente projetada 
para representar o mapa da França do século XVII com as casas numeradas. Jogadores podem 
mover suas peças pelo tabuleiro dentro dessa janela, acompanhando o progresso da jornada.
• Os menus, acessados pela barra de menus na janela principal, podem ser utilizados para uma 
variedade de funções. Por exemplo, pode haver um menu para “Jogar dado” que, quando 
selecionado, determina o número de casas a mover no tabuleiro; outro menu para “Cartas de 
evento” poderia abrir uma nova janela‑filha MDI para mostrar as cartas disponíveis e permitir que 
o jogador selecione uma.
156
Unidade II
• Roleta de duelo também pode ser implementada como janela‑filha MDI separada, aberta quando 
um jogador cai numa casa de duelo. Essa janela pode apresentar as opções de duelo e exibir 
o resultado.
• Para as fichas de fortuna e honra, pode‑se utilizar uma janela‑filha MDI que exibe o status atual 
de cada jogador. Essa janela poderia ser atualizada em tempo real à medida que os jogadores 
ganham ou perdem fichas ao longo do jogo.
• As peças podem ser gerenciadas dentro da janela do tabuleiro, movendo‑se conforme as ações 
dos jogadores são executadas pelas opções do menu.
• A janela principal pode ter um menu Opções que oferece funcionalidades como regras do jogo, 
reiniciar partida, salvar progresso, entre outras.
157
PROGRAMAÇÃO ORIENTADA A OBJETOS II
 Resumo
Elementos gráficos de escolha e organização em interfaces de 
usuário – como caixas de opção (Radio Buttons), seleção (CheckBoxes) e 
combinação (ComboBoxes) – desempenham papel crucial na interação 
do usuário, pois permitem navegar e tomar decisões facilitadas dentro da 
interface, contribuindo para uma experiência mais eficiente e agradável. 
Radio Buttons são utilizados quando é necessário forçar uma escolha 
exclusiva entre várias opções, sendo particularmente úteis em formulários 
de pesquisa, configurações de preferências e questionários.
Em contrapartida, CheckBoxes permitem múltiplas seleções e são ideais 
em cenários que exigem a coleta de uma variedade de preferências ou 
valores. Já as ComboBoxes oferecem a funcionalidade híbrida de uma 
caixa de texto com uma lista suspensa, permitindo tanto a seleção de 
uma lista predefinida quanto a entrada de texto personalizado. É intuitivo 
implementar esses controles em ambientes como C# com Windows Forms, 
e sua personalização pode incluir ajustes em texto, fonte, cor, entre outros.
A manipulação de eventos – como “CheckedChanged” em Radio Buttons 
e CheckBoxes, e “SelectedIndexChanged” em ComboBoxes – é fundamental 
para uma interação dinâmica com o usuário e a coleta de dados de entrada. 
Esses controles são projetados com a usabilidade e a acessibilidade em mente, 
garantindo que sejam claramente rotulados e organizados de forma lógica 
para uma navegação eficiente. Clareza na apresentação das opções e resposta 
fluida às interações são essenciais para uma experiência de usuário positiva.
Seguindo a análise dos elementos gráficos de escolha, abordamos 
o controle de calendário mensal (MonthCalendar) e o seletor de datas 
(DateTimePicker) no Windows Forms. O MonthCalendar facilita a interação 
com o tempo, sendo útil em aplicaçõesque requeiram seleção de datas, 
como reservas de hotel. Já o DateTimePicker, que também permite escolher 
horários, previne erros de entrada de dados, sendo valioso em sistemas 
de reserva e aplicações financeiras. Ambos os controles são descritos em 
detalhe e enfatizam propriedades e eventos úteis.
Vimos os elementos gráficos de organização, essenciais para estruturar 
e apresentar informações de forma lógica e acessível; elementos como 
menus e caixas de listagem (ListBox) não coletam diretamente escolhas 
do usuário, mas facilitam a navegação e acessibilidade. O controle Menu 
é apresentado como meio eficaz de organizar opções e funcionalidades de 
um software, enquanto a ListBox é descrita como componente‑chave para 
exibir listas de opções ou dados de maneira organizada.
158
Unidade II
Finalmente, examinamos outros controles de organização no Windows 
Forms, como TabControl, TreeView e ListView. O primeiro permite separar 
conteúdo em diferentes guias, otimizando o espaço e melhorando a 
usabilidade; o segundo, com sua estrutura hierárquica, é ideal para apresentar 
informações complexas; enquanto o terceiro se destaca por sua flexibilidade 
para exibir dados em diferentes formatos. Cada controle é detalhado e 
ressalta suas propriedades e eventos úteis, o que enfatiza a importância de 
uma navegação clara e lógica na organização das abas e informações.
Também vimos o MDI no Windows Forms, utilizado para gerenciar 
múltiplas janelas ou documentos dentro de uma única janela principal. 
Numa aplicação MDI, a janela principal atua como container para outras 
janelas‑filhas – abordagem particularmente útil em aplicações como 
editores de texto, sistemas de email ou programas de contabilidade, em 
que é necessário trabalhar com vários documentos de forma simultânea. 
Através da propriedade IsMdiContainer, uma janela de formulário é definida 
como container MDI, permitindo incorporar outras janelas‑filhas.
Além disso, destacamos que a manipulação de eventos do mouse é um 
dos pilares na construção de interfaces interativas em Windows Forms. 
Eventos como clique, movimento e passagem do mouse sobre controles 
são essenciais para capturar ações do usuário e responder a elas de maneira 
adequada. Por exemplo, o evento MouseClick pode executar uma ação 
quando se clica em um botão; enquanto MouseMove rastreia o movimento 
do cursor na tela (o que pode ser crucial em aplicações de desenho ou 
jogos). Com o método EventHandler, programadores podem associar esses 
eventos a funções específicas, criando uma interação rica e responsiva.
Especificamente para Os desafios dos mosqueteiros foram mencionadas 
várias técnicas de design e elementos gráficos utilizados na versão Windows 
Forms do jogo para melhorar a imersão e a jogabilidade, incluindo o uso 
de GroupBox para representar informações dos jogadores, imagens de 
cartas de evento e dados, e mudanças dinâmicas na imagem de fundo para 
refletir diferentes cenários da narrativa. A versão Windows Forms também 
incorpora botões para interações específicas e usa eventos de mouse 
para feedback visual. O design cuidadoso desses elementos reflete a 
aplicação de conceitos de UX e IHC para enriquecer a experiência.
No desenvolvimento de interfaces de usuário, escolher e organizar 
elementos gráficos é essencial para criar uma interação harmoniosa 
e intuitiva, e cada elemento tem papel específico em sua navegação e 
decisões. Uma combinação eficaz desses elementos resulta numa interface 
que não só atende às necessidades funcionais, mas também proporciona 
uma experiência enriquecedora.
159
PROGRAMAÇÃO ORIENTADA A OBJETOS II
 Exercícios
Questão 1. Considere que você esteja desenvolvendo uma aplicação Windows Forms em C# relativa 
a um e‑commerce. Nessa aplicação, o usuário tem um conjunto de radio buttons para selecionar o tipo 
de pagamento (cartão de crédito, cartão de débito ou boleto). Além disso, há dois elementos checkbox: 
um para indicar se o usuário deseja receber um recibo por email e outro para indicar se ele gostaria de 
receber newsletters por email.
Nesse cenário, avalie as afirmativas.
I – O usuário pode selecionar mais de um radio button simultaneamente.
II – O usuário pode selecionar apenas um dos elementos checkbox.
III – Radio buttons não permitem qualquer seleção, pois são elementos meramente expositivos.
IV – Para que o usuário seja capaz de fazer a seleção, a propriedade Enabled dos elementos checkbox 
dessa aplicação deve indicar que eles estão habilitados.
É correto o que se afirma em:
A) I, apenas.
B) IV, apenas.
C) I e II, apenas.
D) III e IV, apenas.
E) I, II, III e IV.
Resposta correta: alternativa B.
Análise das afirmativas
I – Afirmativa incorreta.
Justificativa: radio buttons permitem que o usuário escolha apenas uma entre um conjunto 
predefinido de opções. Logo, o usuário não seria capaz de selecionar mais de uma forma de pagamento.
160
Unidade II
II – Afirmativa incorreta.
Justificativa: o usuário pode selecionar mais de um checkbox simultaneamente, ou seja, pode receber 
tanto o recibo quanto a newsletter por email.
III – Afirmativa incorreta.
Justificativa: radio buttons permitem a seleção do usuário; assim, não são apenas elementos expositivos.
IV – Afirmativa correta.
Justificativa: a propriedade Enabled de um checkbox no Windows Forms determina se o controle de 
checkbox está habilitado ou não. Quando Enabled assume valor true, o checkbox pode ser marcado ou 
desmarcado pelo usuário; quando assume valor false, ele é desativado, ou seja, não pode ser alterado. 
Isso pode ser útil quando desejamos impedir que ele altere seu estado até que certas condições 
sejam atendidas.
Questão 2. Os principais eventos de mouse utilizados em aplicações Windows Forms incluem 
MouseClick, MouseDown, MouseUp, MouseMove e MouseWheel. Acerca desse tema, avalie as asserções 
e a relação proposta entre elas.
I – MouseClick e MouseDown são acionados imediatamente quando o botão do mouse é 
pressionado sobre um objeto.
porque
II – Ambos os eventos têm o mesmo propósito.
Assinale a alternativa correta.
A) As asserções I e II são verdadeiras, e a II justifica a I.
B) As asserções I e II são verdadeiras, e a II não justifica a I.
C) A asserção I é verdadeira, e a II é falsa.
D) A asserção I é falsa, e a II é verdadeira.
E) As asserções I e II são falsas.
Resposta correta: alternativa E.
161
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Análise das asserções
I – Asserção falsa.
Justificativa: MouseClick e MouseDown no Windows Forms são acionados em momentos diferentes. 
O MouseDown é acionado assim que o botão do mouse é pressionado sobre um objeto; o MouseClick, 
quando o botão do mouse é pressionado e depois solto sobre o mesmo objeto.
II – Asserção falsa.
Justificativa: MouseClick e MouseDown não têm o mesmo propósito. MouseDown é útil para iniciar 
uma ação assim que o botão do mouse é pressionado, como iniciar uma operação de arrastar um 
elemento. Já o MouseClick, acionado quando o botão do mouse é pressionado e depois solto, deve 
ser utilizado quando queremos realizar uma ação apenas após a conclusão do clique do mouse, 
como selecionar um item numa lista.ou diretamente através da janela de propriedades, onde também se 
pode ajustar propriedades como fonte, cor e tamanho.
A ComboBox pode operar em diferentes modos, determinados pela propriedade DropDownStyle. 
Em um modo, a caixa funciona apenas como lista suspensa, impedindo a entrada de texto pelo 
125
PROGRAMAÇÃO ORIENTADA A OBJETOS II
usuário; em outro modo, permite editar texto, oferecendo maior flexibilidade. Essa capacidade de 
alternar entre um campo de entrada de texto e uma lista suspensa faz da ComboBox um elemento 
útil em interfaces onde o espaço é limitado, mas a variedade de escolhas é necessária.
A interação do usuário com a ComboBox é gerenciada através de eventos. O quadro 11 apresenta 
uma lista não exaustiva de propriedades e eventos: o SelectedIndexChanged, por exemplo, é acionado 
quando o usuário seleciona um item da lista, permitindo que o software responda adequadamente 
a essa escolha. Isso pode ser útil para carregar dados dinamicamente ou alterar outros elementos da 
interface com base na seleção feita pelo usuário.
Quadro 11 – ComboBox: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
Items Coleção de itens na ComboBox
SelectedIndex Índice do item selecionado na ComboBox
SelectedItem Item atualmente selecionado na ComboBox
DropDownStyle Especifica o estilo da ComboBox
Text Indica o texto associado à ComboBox
Enabled Define se a ComboBox está habilitada
Visible Define se a ComboBox está visível
Evento
DropDown Ocorre quando a lista da ComboBox é exibida
DropDownClosed Ocorre quando a lista da ComboBox é fechada
SelectedIndexChanged Ocorre quando o índice de seleção da ComboBox é alterado
TextUpdate Ocorre quando o texto da ComboBox é atualizado
Usabilidade e acessibilidade também são considerações cruciais no uso de ComboBoxes. Deve‑se 
garantir que a lista de opções seja clara e concisa, evitando confusões ou dificuldades na escolha. Além 
disso, quando a função de edição está habilitada, os programadores devem considerar a validação de 
dados para garantir que as entradas dos usuários sejam apropriadas para o contexto da aplicação.
3.2 Elementos gráficos de escolha: calendário mensal e seletor de data
Continuando com a apresentação dos elementos de escolha, o controle de calendário mensal no 
Windows Forms é um elemento gráfico robusto e funcional, projetado para facilitar a interação do 
usuário com datas. Conhecido como MonthCalendar, esse controle oferece uma representação visual 
intuitiva de um mês, permitindo aos usuários visualizar dias, semanas e meses de maneira clara e 
organizada. Sua importância em interfaces gráficas é destacada pelo seu uso frequente em aplicações 
que requerem seleção de datas, como reservas de hotel, agendamentos de reunião ou qualquer 
aplicativo que necessite de entrada de data.
126
Unidade II
Quadro 12 − MonthCalendar: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
AnnuallyBoldedDates Define ou obtém um array de datas em negrito anualmente no 
calendário
CalendarDimensions Define ou obtém o número de colunas e linhas de meses exibidos
FirstDayOfWeek Define ou obtém o primeiro dia da semana exibido no calendário
MaxDate Define ou obtém a data máxima selecionável
MinDate Define ou obtém a data mínima selecionável
MonthlyBoldedDates Define ou obtém um array de datas em negrito em cada mês no 
calendário
SelectionRange Define ou obtém o intervalo de datas selecionado no calendário
Evento
DateChanged Ocorre quando a data selecionada é alterada
DateSelected Ocorre quando o usuário finaliza a seleção de uma data ou intervalo 
de datas
MonthChanged Ocorre quando o mês exibido é alterado
O quadro fornece uma visão abrangente das funcionalidades e características do controle de 
calendário mensal, destacando os principais aspectos que os desenvolvedores podem utilizar para 
melhorar a interação do usuário com datas em suas aplicações. O MonthCalendar é valioso devido 
à sua interface direta e facilidade de uso. O controle exibe um mês por vez, com navegação simples 
para mudar para outros meses ou anos, se necessário. Os dias são claramente marcados, e datas 
especiais ou feriados podem ser realçados para fácil identificação.
O controle também oferece funcionalidades como seleção de intervalos de datas, útil em cenários 
nos quais o usuário precisa escolher um período (como o começo e o fim de uma reserva). Além de 
sua funcionalidade básica de exibição de datas, o controle de calendário mensal no Windows Forms 
é altamente personalizável; desenvolvedores podem ajustar aspectos visuais como cores, fontes e 
formatos para se alinhar com a estética geral da aplicação. Isso é importante para a consistência visual 
e para garantir que o controle seja acessível a todos os usuários, incluindo aqueles com necessidades 
especiais de visualização.
A interação com o controle de calendário mensal é gerenciada por uma série de eventos, permitindo 
que os desenvolvedores programem respostas específicas às ações do usuário. Por exemplo, um evento 
pode ser disparado quando o usuário seleciona uma data, acionando ações como a atualização de 
outros controles na interface ou a exibição de informações relevantes à data escolhida.
A usabilidade do controle de calendário mensal também deve ser considerada: a interface deve 
ser intuitiva o suficiente para que os usuários compreendam como navegar pelos meses e selecionar 
datas sem confusão. A clareza na apresentação das datas e a resposta fluida às interações do usuário 
são essenciais para uma experiência positiva. Já o seletor de datas – conhecido tecnicamente como 
DateTimePicker – é um controle essencial, que fornece interface interativa para selecionar datas e, em 
algumas configurações, horários. Esse controle é projetado para simplificar a maneira como os usuários 
inserem datas em uma aplicação, substituindo a necessidade de digitação manual por uma experiência 
127
PROGRAMAÇÃO ORIENTADA A OBJETOS II
mais intuitiva e visual. O DateTimePicker exibe a data de forma clara, geralmente no formato‑padrão de 
data e hora, dependendo das configurações regionais do sistema operacional do usuário.
O aspecto mais notável desse controle é o calendário suspenso, ativado quando o usuário interage 
com o controle. Esse calendário fornece uma visão mensal e permite que os usuários naveguem entre 
meses e anos para selecionar uma data específica. Geralmente navega‑se através de botões simples, que 
facilitam a mudança rápida de mês ou ano.
Uma das principais vantagens do DateTimePicker é a prevenção de erros de entrada de dados. 
Ao utilizar um calendário para selecionar datas, o controle garante que os usuários selecionem uma 
data válida, eliminando problemas comuns de entrada de dados, como formatos de data incorretos 
ou  datas inexistentes. Essa validação automática é crucial quando a precisão da data é importante, 
como sistemas de reserva ou aplicações financeiras.
Além da seleção de datas, o DateTimePicker pode ser configurado para permitir a escolha de 
horários. Em seu modo de exibição de tempo, o controle oferece uma interface elegante para que os 
usuários escolham horas, minutos e, se necessário, segundos. Essa funcionalidade é útil se o tempo 
exato for uma variável crítica, como no agendamento de compromissos ou eventos.
Do ponto de vista do desenvolvimento, o DateTimePicker é altamente personalizável. Assim, os 
programadores podem definir propriedades como o formato da data e da hora exibida, os limites mínimos 
e máximos de datas selecionáveis, e alterar a aparência para se adequar à estética geral da aplicação. 
Além disso, o controle gera eventos como o ValueChanged, acionado quando a data selecionada é 
alterada, permitindo que a aplicação responda dinamicamente às escolhas do usuário.
O quadro 13 oferece um vislumbre das funcionalidades e características do controle DateTimePicker, 
destacando como ele pode ser configurado e utilizado para melhorar a interação do usuário com a 
seleção de datase horas em aplicações Windows Forms.
Quadro 13 − DateTimePicker: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
Format Define o formato da data e/ou hora exibida
Value Obtém ou define a data/hora atual no controle
MinDate Define a data mínima selecionável
MaxDate Define a data máxima selecionável
CustomFormat Define um formato de data/hora personalizado, a ser usado quando a 
propriedade Format estiver definida para Custom
ShowUpDown Define se um controle de seta deve ser usado para selecionar datas/
horas em vez de um calendário suspenso
ShowCheckBox Define se uma caixa de seleção é exibida no controle. Quando marcada, 
a data/hora pode ser ajustada
Checked Obtém ou define se a caixa de seleção no controle está marcada
DropDownAlign Define o alinhamento do calendário suspenso em relação ao controle
Evento ValueChanged Ocorre quando a propriedade Value é alterada
128
Unidade II
Embora tanto o MonthCalendar quanto o DateTimePicker sejam controles do Windows Forms que 
manipulam e exibem datas, eles servem a propósitos distintos e apresentam diferenças significativas em 
termos de funcionalidade e design. O primeiro é um controle que oferece uma visão abrangente de um 
calendário mensal e é particularmente eficaz quando o usuário precisa de uma visão geral de um mês ou 
navegar por múltiplos meses ou anos. Esse controle permite visualizar e selecionar datas num contexto 
mais amplo, sendo útil para escolher intervalos de datas, como um período de férias ou intervalo para um 
evento. Já o MonthCalendar é visualmente mais expansivo e ocupa uma área maior na interface do usuário 
devido à sua natureza de exibir um mês inteiro de uma vez (ou mais, dependendo da configuração).
Por outro lado, DateTimePicker é um controle mais compacto, projetado para permitir ao usuário 
selecionar uma única data e, em algumas configurações, uma hora específica. A principal característica 
do DateTimePicker é sua caixa de combinação, que exibe a data selecionada. Sob interação, o controle 
exibe um calendário suspenso para selecionar datas, oferecendo uma maneira mais direta e focada de 
escolher uma data específica sem a visão geral de um mês completo. Além disso, pode ser configurado 
para permitir a escolha de horários, funcionalidade não disponível no MonthCalendar.
A escolha entre MonthCalendar ou DateTimePicker em uma aplicação Windows Forms depende das 
necessidades específicas de interação do usuário com datas. Se a tarefa exigir uma visão abrangente do 
calendário – navegando por meses ou selecionando intervalos de datas –, MonthCalendar seria a escolha 
apropriada. Por outro lado, se o requisito for a seleção simples de uma única data (possivelmente com 
hora), e o espaço na interface for um fator a considerar, DateTimePicker seria mais adequado.
3.3 Elementos gráficos de organização: menus e caixa de listagens
Como vimos, os elementos de seleção são fundamentais para a interação direta do usuário 
com a aplicação, sendo projetados para capturar suas escolhas e preferências, funcionando como 
pontos de interação onde ele fornece suas respostas ou faz suas escolhas dentro do sistema. Esses 
elementos são capazes de registrar decisões, seja marcando opções, escolhendo entre alternativas 
mutuamente exclusivas ou selecionando valores de uma lista.
A função principal desses elementos é coletar inputs do usuário, seja para processar dados, filtrar 
informações ou configurar preferências. São essenciais para formulários, configurações e qualquer interface 
que necessite de entradas diretas dele. Por outro lado, os elementos de organização desempenham papel 
diferente, focando a disposição e a estruturação da interface destinada a ele.
Esses elementos agrupam, categorizam e apresentam informações e controles de maneira 
lógica e acessível, não coletando diretamente as escolhas do usuário, mas facilitando a navegação e a 
acessibilidade, organizando a informação de forma que ele possa interagir com a aplicação de maneira 
mais eficiente e intuitiva. Elementos de organização são fundamentais para manter a interface limpa, 
organizada e fácil de entender, garantindo que ele encontre rapidamente o que procura e compreenda 
como interagir com a aplicação.
129
PROGRAMAÇÃO ORIENTADA A OBJETOS II
 Observação
O termo menu para se referir a um controle de interface do usuário 
em sistemas de computação se origina da analogia com cardápios de 
restaurante. Tradicionalmente, menu de um restaurante é uma lista 
de opções disponíveis para o cliente, de onde ele pode fazer sua escolha.
A mesma lógica foi aplicada ao design de interfaces de usuário em 
sistemas de computador. Nos primórdios da computação, quando as 
interfaces gráficas começaram a se desenvolver, era necessário um método 
eficiente e intuitivo para apresentar opções de comandos e funções aos 
usuários. Assim, designers de interface adotaram a ideia de menu como 
maneira de organizar e exibir escolhas de software numa lista formatada. 
O termo foi uma escolha natural, dada sua familiaridade e a associação 
com a escolha de opções de uma lista.
Com a evolução das interfaces gráficas de usuário (GUIs), o conceito 
de menu expandiu‑se e passou a incluir não apenas listas simples, mas 
também menus contextuais (clicar com o botão direito), suspensos e em 
barras, comuns em muitos programas e sistemas operacionais. Em todos os 
casos, a ideia fundamental permanece: apresentar uma lista de opções ou 
comandos ao usuário.
O controle Menu é essencial na construção de interfaces de usuário, pois proporciona um meio 
eficaz e organizado de apresentar opções e funcionalidades, desempenhando papel crucial na melhoria 
da navegabilidade e acessibilidade de uma aplicação, e permitindo aos usuários interagir com o software 
de maneira intuitiva e direta. É tipicamente utilizado para agrupar e organizar diferentes comandos e 
opções de uma aplicação em um único local.
Geralmente localizado na parte superior da janela principal do aplicativo, o Menu fornece um ponto 
de acesso central para as funcionalidades oferecidas pelo software. Ao clicar em um item do Menu, o 
usuário pode revelar um conjunto de ações relacionadas, organizadas em um formato de lista suspensa. 
Essa estrutura hierárquica facilita a localização de comandos específicos e melhora a eficiência do 
usuário ao navegar pelo aplicativo.
O Menu pode ser composto por vários submenus e itens, cada um representando uma ação ou 
grupo de ações. Por exemplo, um Menu típico pode incluir itens como Arquivo, Editar, Visualizar, cada 
um levando a opções mais específicas, como Abrir, Salvar e Copiar. Essa abordagem modular permite 
que os desenvolvedores estruturem as funcionalidades do aplicativo de maneira lógica e acessível, 
simplificando a experiência.
130
Unidade II
Do ponto de vista da programação, o controle Menu no Windows Forms é flexível e personalizável. 
O quadro a seguir detalha algumas das principais propriedades e eventos do controle Menu no 
Windows Forms.
Quadro 14 – Menu: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
Items Indica a coleção de itens do menu
Text Mostra o texto associado ao item do menu
Enabled Indica se o item do menu está habilitado
Visible Indica se o item do menu está visível
DropDownItems Apresenta itens que aparecem na lista suspensa do item 
do menu
ShortcutKeys Mostra as teclas de atalho associadas ao item do menu
ShowShortcutKeys Indica se as teclas de atalho são exibidas ao lado do item 
do menu
Evento
DropDown Ocorre quando a lista suspensa do item do menu é exibida
Click Ocorre quando o item do menu é clicado
Desenvolvedores podem adicionar, remover e modificar itens de menu conforme as necessidades da 
aplicação. Também é possível vincular eventos a itens individuais de menu, ou seja, podem programar 
respostas específicas para quando um usuário clica num item de menu. Essa funcionalidade é vital para 
criar uma aplicação interativa, onde as ações do usuário no menu resultam emrespostas imediatas 
do software.
Além de suas funcionalidades básicas, a aparência do Menu pode ser personalizada para se adequar 
ao design geral do aplicativo. Isso inclui alterar fontes, cores e outros aspectos estilísticos, garantindo 
que o Menu não apenas funcione bem, mas também se integre harmoniosamente com a estética da 
interface do usuário.
O controle Caixas de Listagem – conhecido como ListBox – é fundamental para exibir listas de 
itens para usuários. Esse controle é amplamente utilizado em interfaces gráficas por sua capacidade 
de apresentar uma coleção de itens de maneira organizada e acessível, permitindo interações simples 
e eficientes, sendo útil quando for necessário apresentar uma lista de opções ou dados de onde eles 
possam escolher. Por exemplo, num formulário de aplicação, um ListBox pode listar as opções de países, 
cidades ou outros dados semelhantes.
O que torna o ListBox um controle tão valioso é sua simplicidade e flexibilidade. Seus itens são 
exibidos numa lista vertical e permitem percorrer facilmente as opções disponíveis e fazer a devida 
escolha. Uma de suas principais características é a capacidade de suportar a seleção única ou múltipla. 
Em sua configuração‑padrão, permite que os usuários selecionem um único item de uma lista. No 
entanto, pode ser configurado para permitir seleções múltiplas, o que é útil quando eles precisam 
escolher vários itens, como num sistema de filtragem ou numa interface de seleção de recursos.
131
PROGRAMAÇÃO ORIENTADA A OBJETOS II
O quadro 15 apresenta uma lista não exaustiva de propriedades e eventos do ListBox. Do ponto 
de vista do design da interface do usuário, o ListBox é altamente personalizável: desenvolvedores têm 
a liberdade de ajustar várias propriedades para adequá‑lo à estética geral da aplicação, incluindo a 
personalização de fontes, cores e tamanho, garantindo que não só funcione bem, mas também se 
harmonize com o design da interface do usuário.
Adicionalmente, o ListBox é programável e permite uma vasta gama de interações programáticas. 
Eventos como SelectedIndexChanged podem desencadear ações específicas quando os usuários fazem 
uma seleção, o que é essencial para criar interfaces dinâmicas, nas quais a seleção de um item num 
ListBox pode atualizar automaticamente outras partes da interface ou desencadear processos de 
negócios específicos.
Quadro 15 – ListBox: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
Items Mostra a coleção de itens do menu
Text Apresenta o texto associado ao item do menu
Enabled Indica se o item do menu está habilitado
Visible Indica se o item do menu está visível
DropDownItems Apresenta os itens que aparecem na lista suspensa do 
item do menu
ShortcutKeys Expõe as teclas de atalho associadas ao item do menu
ShowShortcutKeys Indica se as teclas de atalho são exibidas ao lado do item 
do menu
Evento
Click Ocorre quando o item do menu é clicado
DropDown Ocorre quando a lista suspensa do item do menu é 
exibida
DropDownClosed Ocorre quando a lista suspensa do item do menu é 
fechada
3.4 Elementos gráficos de organização: controle de abas, visualização em 
árvore e em lista
No Windows Forms, um dos controles mais versáteis e úteis para organizar interfaces de usuário é 
o controle de abas, conhecido tecnicamente como TabControl, que permite aos desenvolvedores de 
software separar conteúdo em diferentes guias ou abas dentro da mesma janela, facilitando a organização 
e a apresentação de informações de forma clara e acessível. O controle de abas é essencialmente uma 
coleção de páginas de guia; cada uma funciona como um container para outros controles. Cada aba 
pode conter uma variedade de elementos de interface do usuário, como textos, botões, caixas de texto, 
entre outros. Esse método de agrupamento é útil em aplicações com uma quantidade significativa de 
informações ou funcionalidades, permitindo aos usuários alternar facilmente entre diferentes seções 
sem precisar navegar para novas janelas ou diálogos.
132
Unidade II
Um dos principais benefícios do controle de abas é sua eficiência no uso do espaço. Em vez de 
sobrecarregar o usuário com uma grande quantidade de informações em uma única tela, o TabControl 
permite que os desenvolvedores distribuam o conteúdo de maneira lógica e organizada em várias abas. 
Isso não apenas melhora a usabilidade, mas também torna a interface mais intuitiva, pois os usuários 
podem facilmente localizar e acessar a informação ou funcionalidade de que precisam.
Do ponto de vista do design e da programação, TabControl no Windows Forms é altamente personalizável. 
Desenvolvedores podem ajustar a aparência das abas, incluindo cor, fonte e posição na janela, seja na 
parte superior, inferior, esquerda ou direita. Além disso, é possível programar o comportamento das 
abas, adicionando funcionalidades específicas, acionadas quando uma aba é selecionada ou modificada.
Quadro 16 – TabControl: exemplos de propriedades e eventos úteis
Tipo Nome Descrição
Propriedade
TabPages Mostra a coleção de páginas de guias no TabControl
SelectedTab Apresenta a aba atualmente selecionada no TabControl
TabIndex Aponta a ordem de tabulação das abas dentro do 
TabControl
Appearance Expõe o aspecto das abas no TabControl (botões, abas 
planas etc.)
Alignment Apresenta o alinhamento das abas no TabControl 
(superior, inferior, esquerda, direita)
Multiline Indica se as abas são exibidas em várias linhas
SizeMode Define como as abas são dimensionadas (fixas, 
preenchimento etc.)
ItemSize Mostra o tamanho das abas no TabControl
Evento
Selecting Ocorre antes de uma nova aba ser selecionada
Selected Ocorre depois de uma nova aba ser selecionada
SelectedIndexChanged Ocorre quando a aba selecionada é alterada
Ao utilizar o TabControl, é importante considerar a experiência do usuário. Uma navegação clara e a 
lógica na organização das abas são essenciais para evitar confusão. Cada aba deve conter informações 
ou controles relacionados, e seu título deve refletir claramente o conteúdo que ela abriga.
133
PROGRAMAÇÃO ORIENTADA A OBJETOS II
 Observação
O controle TabControl no Windows Forms compartilha muitas 
semelhanças com as abas de um navegador web (como Google Chrome ou 
Microsoft Edge) em termos de funcionalidade e propósito. Ambos servem 
como meios eficientes de organizar e apresentar conteúdo separado num 
mesmo contexto visual, facilitando a navegação e o acesso à informação. 
Em um navegador web, as abas permitem que os usuários mantenham várias 
páginas abertas simultaneamente, cada uma acessível com um simples 
clique. Essa funcionalidade é crucial para uma experiência de navegação 
eficiente e permite que os usuários alternem rapidamente entre diferentes 
sites ou páginas sem perder o contexto ou precisar abrir novas janelas.
De maneira similar, o TabControl no Windows Forms organiza diferentes 
conjuntos de controles e conteúdos em abas separadas dentro da mesma 
janela da aplicação. Cada aba representa uma seção distinta da interface 
do usuário, podendo conter controles variados como textos, campos de 
entrada, botões, entre outros. Essa estrutura é útil em aplicações com 
múltiplas configurações, opções ou tipos de conteúdo, que podem ser 
organizadas de forma clara e acessível em abas diferentes.
O controle visualização em árvore do Windows Forms é uma ferramenta essencial para 
desenvolvedores que buscam criar interfaces de usuário intuitivas e organizadas. Conhecido como 
TreeView, esse controle oferece uma estrutura hierárquica para apresentar dados, assemelhando‑se a 
uma árvore com nós que podem ser expandidos e contraídos. Sua principal vantagem é a capacidade 
de exibir informações complexas de maneira simplificada e acessível, permitindo aos usuários 
navegar facilmente por categorias e subcategorias.
O TreeView é amplamente utilizado para representar dados com relações hierárquicas naturais – como 
sistemas de arquivos, estruturas organizacionais ou mesmo categorias de produtosem aplicações 
comerciais. Cada item no TreeView é chamado de nó, e esses nós podem conter subnós, criando uma 
representação em árvore. Essa estrutura permite que os usuários tenham uma visão geral do conjunto 
de dados e, ao mesmo tempo, a capacidade de focar partes específicas da hierarquia.
Assim como os demais controles já apresentados, o TreeView em C# é altamente personalizável. 
Desenvolvedores podem adicionar, remover ou editar nós programaticamente, além de ajustar a 
aparência e o comportamento do controle. Eventos como clique, expansão ou colapso de um nó são 
facilmente gerenciáveis e permitem uma interação dinâmica e responsiva com o usuário. Além disso, o 
TreeView pode ser integrado com outras partes da interface do usuário, como formulários e controles 
de detalhes, para proporcionar uma experiência de usuário ainda mais rica e interativa.
134
Unidade II
Quadro 17 – TreeView: exemplos de propriedades e eventos úteis
Tipo Nome Aplicação
Evento
AfterSelect Após a seleção de um nó
BeforeSelect Antes da seleção de um nó
NodeMouseClick Quando um nó é clicado com o mouse
NodeMouseDoubleClick Quando um nó é clicado duas vezes com o mouse
AfterExpand Após a expansão de um nó
BeforeExpand Antes da expansão de um nó
AfterCollapse Após o colapso de um nó
BeforeCollapse Antes do colapso de um nó
ItemDrag Quando um item é arrastado
Propriedade
Nodes Obtém a coleção de nós de árvore atribuídos ao controle 
TreeView
ShowLines Determina se as linhas são exibidas entre os nós da 
árvore
ShowRootLines Determina se as linhas são exibidas entre os nós‑raiz
CheckBoxes Determina se as caixas de seleção são exibidas ao lado 
dos nós da árvore
FullRowSelect Determina se o clique num item seleciona a linha inteira 
no controle TreeView
Sort Organiza os nós do controle TreeView
TopNode Obtém ou define o nó de árvore superior no controle 
TreeView
SelectedNode Obtém ou define o nó de árvore selecionado no controle 
TreeView naquele momento
Outro aspecto importante do TreeView é sua capacidade de melhorar a experiência do usuário. 
A interface hierárquica é intuitiva e lhe permite encontrar rapidamente o que procura, o que é 
especialmente útil em aplicações com grande volume de dados ou categorias complexas. A natureza 
expansível e colapsável dos nós também ajuda na gestão do espaço na tela, tornando as interfaces 
menos congestionadas e mais agradáveis esteticamente.
Um controle muito interessante do Windows Forms é a visualização em lista, conhecido como ListView, 
componente vital para apresentar uma lista de itens de forma organizada e eficiente. Esse controle é 
amplamente utilizado por sua flexibilidade e capacidade de exibir uma variedade de informações em 
diferentes formatos. É especialmente útil quando é necessário exibir coleções de dados ou elementos de 
forma que os usuários possam facilmente visualizar, selecionar e manipular esses itens.
Uma das principais características do ListView é sua capacidade de exibir itens em diferentes modos 
de visualização, como detalhes, lista, ícones grandes ou pequenos. Isso permite que os desenvolvedores 
escolham o layout mais adequado para os dados apresentados. Por exemplo, o modo detalhes é ideal 
para exibir múltiplas propriedades de cada item em colunas, enquanto ícones é excelente para uma 
exibição mais visual, em que cada item é representado por um ícone.
135
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Desenvolvedores podem definir propriedades como alinhamento do texto, cor de fundo e até mesmo 
adicionar controles personalizados dentro de cada item do ListView. Isso abre possibilidades para criar 
interfaces de usuário ricas e interativas, que podem ser adaptadas para atender às necessidades de 
qualquer aplicativo.
Outro aspecto importante do ListView é sua capacidade de manipular dados. Desenvolvedores 
podem adicionar, remover ou modificar itens e subitens, permitindo uma interação dinâmica com a lista. 
Eventos como cliques nos itens, seleção e edição de subitens são facilmente gerenciáveis e oferecem 
uma experiência de usuário interativa e responsiva; sua interface intuitiva permite navegar, ordenar e 
buscar dados com facilidade. Além disso, eficiência na apresentação e manipulação de dados não só 
economiza tempo para o usuário final, mas também melhora a eficácia geral da aplicação.
Inserido o ListView no formulário, a configuração do modo de exibição se torna um passo crucial, 
pois ele oferece vários modos – como detalhes, lista, pequenos ícones e grandes ícones –, cada um 
adequado a diferentes requisitos de interface. A seleção do modo de exibição adequado influencia 
diretamente a forma como os itens são apresentados. Para adicionar colunas no modo de exibição de 
detalhes, é necessário acessar a propriedade Columns no painel de propriedades e adicionar as colunas 
necessárias. Cada coluna pode representar diferentes aspectos dos dados a exibir – nome, data, tamanho, 
entre outros.
Quadro 18 – ListView: exemplos de propriedades e eventos úteis
Tipo Nome Aplicação
Evento
ItemSelectionChanged Quando se altera a seleção de um item no ListView
ItemChecked Quando se altera o estado de verificação de um item
ColumnClick Quando se clica numa coluna no modo de exibição de detalhes
MouseClick Quando se clica no ListView com o mouse
MouseDoubleClick Quando se clica no ListView duas vezes com o mouse
KeyPress Quando se pressiona uma tecla enquanto o ListView tem foco
Propriedade
Items Obtém a coleção de itens no ListView
Columns Obtém a coleção de colunas no ListView, no modo de exibição de 
detalhes
View Obtém ou define o modo de exibição a ser usado para exibir itens no 
controle
FullRowSelect Determina se a seleção abrange a linha inteira no modo de exibição 
de detalhes
GridLines Indica se as linhas de grade são exibidas entre as linhas e colunas no 
modo de detalhes
MultiSelect Determina se o usuário pode selecionar mais de um item de cada vez
Sort Permite a classificação automática de itens no ListView
LargeImageList Especifica a ImageList a ser usada quando os ícones grandes são 
exibidos
SmallImageList Especifica a ImageList a ser usada quando os ícones pequenos são 
exibidos
SelectedItems Obtém uma coleção contendo todos os itens selecionados no controle
136
Unidade II
Acessando a propriedade Items no painel de propriedades, o desenvolvedor pode adicionar, 
editar ou remover itens conforme necessário; e cada item adicionado pode conter vários subitens, 
que correspondem às colunas definidas anteriormente. O quadro 18 oferece uma visão geral das 
funcionalidades que o controle ListView proporciona, destacando como ele pode ser personalizado e 
como responde a ações do usuário em um aplicativo Windows Forms.
Neste tópico tratamos da importância dos elementos de organização, como menus e listas, 
discutidos em relação à sua função de estruturar e apresentar informações de maneira lógica e acessível. 
Também acentuamos controles como TabControl, TreeView e ListView, destacando suas características, 
propriedades e eventos para organizar e apresentar dados de maneira eficiente em interfaces de usuário.
A figura 49 ilustra todos os controles vistos neste tópico dentro de um único formulário.
Figura 49 – Resumo: elementos gráficos de escolha e organização
137
PROGRAMAÇÃO ORIENTADA A OBJETOS II
 Saiba mais
Apresentamos neste livro‑texto os principais controles, mas existem 
outros. A quantidade de controles gráficos disponíveis na barra de 
ferramentas do Windows Forms pode variar significativamente com 
base na versão do Visual Studio e em quaisquer componentes adicionais 
instalados; normalmente o conjunto‑padrão de controles varia entre 20 e 
50. Se considerarmos controles personalizados ou de terceiros, que podem 
ser adicionados, o número total pode variar de 20 a 150 ou mais.
A seguir, um livro que oferece uma descrição detalhada dos controles do 
Windows Forms no Visual Studio:
TROELSEN, A. Pro C# 5.0 and the .NET 4.5 Framework. 6. ed. Nova York: 
Apress, 2012.
Ele é conhecidopor fornecer uma exploração aprofundada do C# e do 
.NET Framework, incluindo uma seção detalhada sobre o desenvolvimento de 
aplicações Windows Forms, cobrindo uma gama ampla de controles disponíveis 
no Windows Forms e oferecendo explicações sobre suas funcionalidades e 
exemplos de como usá‑los.
Outra opção:
SELLS, C. Windows Forms Programming in C#. Boston: Addison 
Wesley, 2003.
O livro é específico para programação em Windows Forms com C# e 
oferece uma cobertura detalhada dos controles de interface do usuário, 
além de técnicas de programação de interface gráfica.
4 MANIPULAÇÃO DE EVENTOS E JANELA MDI
Manipular eventos e implementar janelas do tipo multiple‑document interface (MDI) são aspectos 
fundamentais do desenvolvimento de aplicações interativas, especialmente quando se considera a 
interação humano‑computador (IHC) e a experiência do usuário (UX). Quando aplicados com eficácia, 
esses conceitos podem enriquecer a funcionalidade e a usabilidade de uma aplicação. Eventos de 
mouse – como cliques, movimentos e rolagem – e de teclado – incluindo pressionamentos e combinações 
de teclas – são os principais meios pelos quais os usuários interagem com os elementos da interface.
Capturar e responder a esses eventos adequadamente permite que os desenvolvedores criem 
interfaces ricas e responsivas. Por exemplo, um clique do mouse pode desencadear a abertura de um 
138
Unidade II
menu, enquanto um pressionamento de tecla pode iniciar uma busca ou ativar um atalho. A programação 
cuidadosa desses eventos é crucial para garantir uma experiência de usuário suave e intuitiva.
Além disso, a manipulação eficaz desses eventos aumenta a acessibilidade da aplicação, atendendo 
a usuários com diferentes preferências e necessidades de interação. O conceito de MDI refere‑se a um 
estilo de interface gráfica que permite abrir e gerir múltiplos documentos ou janelas dentro de uma 
única janela principal da aplicação. Essa abordagem é útil em aplicações como editores de texto e 
sistemas de gestão, onde usuários podem precisar trabalhar com vários documentos simultaneamente.
Num ambiente MDI, cada documento é aberto em sua própria janela interna, que pode ser organizada, 
redimensionada e manipulada independentemente dentro da janela principal. Essa estrutura oferece 
uma gestão eficiente do espaço de trabalho e facilita a multitarefa, melhorando a eficiência do usuário. 
Além disso, ao confinar vários documentos numa única janela principal, o MDI ajuda a manter a área de 
trabalho organizada e reduz a desordem na barra de tarefas ou no desktop.
4.1 Manipulando eventos de mouse e teclado
Manipular eventos de mouse em C# no contexto do Windows Forms é uma parte fundamental 
da interação do usuário com a interface gráfica. Nesse ambiente, os eventos de mouse capturam e 
respondem a várias ações do usuário, como cliques, movimento do mouse e rolagem. O Windows 
Forms – biblioteca de classes que faz parte do .NET Framework – fornece uma maneira robusta e fácil 
de gerenciar esses eventos para criar interfaces interativas e responsivas. No coração da manipulação de 
eventos de mouse no Windows Forms está o conceito de eventos e delegados do C#.
 Lembrete
Evento é basicamente uma notificação enviada pelo sistema 
operacional indicando que algo aconteceu; no caso, uma ação relacionada 
ao mouse. Por exemplo, quando o usuário clica num botão, o evento de clique 
do mouse é disparado. Para responder a esses eventos, os desenvolvedores 
utilizam delegados, que são referências a métodos. Esses métodos, 
também conhecidos como manipuladores de evento, são então invocados 
quando este ocorre.
Os principais eventos de mouse utilizados em aplicações Windows Forms incluem MouseClick, 
MouseDown, MouseUp, MouseMove e MouseWheel – cada um serve a um propósito. Por exemplo:
• MouseDown ocorre quando um botão do mouse é pressionado, enquanto MouseUp ocorre 
quando é solto.
• MouseMove é útil para rastrear o movimento do mouse sobre um formulário ou controle.
• MouseWheel gerencia a ação de rolagem do mouse.
139
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Para manipular esses eventos, o desenvolvedor deve primeiro registrar um manipulador de eventos 
para aquele desejado. Isso é feito associando‑o a um método no código, e esse método deve ter uma 
assinatura específica, geralmente recebendo um objeto remetente (indicando a fonte do evento) e um 
objeto de argumentos de evento (que contém informações específicas dele, como a posição do mouse na 
tela). Associado o manipulador de eventos a um evento de mouse, o método correspondente é chamado 
automaticamente pelo .NET Framework sempre que ele ocorrer. Dentro desse método, o desenvolvedor 
pode então implementar a lógica necessária.
Para ilustrar a manipulação do mouse, criamos um formulário simples (Form1) com um botão 
“meuBotao”. Depois, no código do formulário (figura 50), adicionamos os manipuladores de eventos 
ao meuBotao, e então assumimos que este já foi inicializado no método InitializeComponent – gerado 
automaticamente pelo Visual Studio ao usar o designer de formulários – e demonstramos como 
manipular eventos de mouse como MouseClick, MouseDown, MouseUp, MouseMove e MouseWheel.
Quando o programa da figura 50 é executado, podemos interagir com o botão e visualizar (figura 51) 
como os diferentes eventos de mouse são tratados:
• MouseClick: mostra uma mensagem quando o botão é clicado.
• MouseDown: mostra uma mensagem quando o botão do mouse é pressionado sobre o botão.
• MouseUp: mostra uma mensagem quando o botão do mouse é solto.
• MouseMove: atualiza o título do formulário com a posição atual do mouse.
• MouseWheel: mostra uma mensagem quando a roda do mouse é usada.
1. using System;
2. using System.Windows.Forms;
3.
4. namespace Resumo
5. {
6. public partial class Form1 : Form
7. {
8. public Form1()
9. {
10. InitializeComponent();
11. // Registro de eventos do mouse para o botão
12. meuBotao.MouseClick += new MouseEventHandler
 (this.MeuBotao_MouseClick);
140
Unidade II
13. meuBotao.MouseDown += new MouseEventHandler
 (this.MeuBotao_MouseDown);
14. meuBotao.MouseUp += new MouseEventHandler
 (this.MeuBotao_MouseUp);
15. meuBotao.MouseMove += new MouseEventHandler
 (this.MeuBotao_MouseMove);
16. meuBotao.MouseWheel += new MouseEventHandler
 (this.MeuBotao_MouseWheel);
17. }
18.
19. private void MeuBotao_MouseClick(object remetente, MouseEventArgs e)
20. {
21. MessageBox.Show(“MouseClick: Botão “ + e.Button + “ clicado.”);
22. }
23. private void MeuBotao_MouseDown(object remetente, MouseEventArgs e)
24. {
25. MessageBox.Show(“MouseDown: Botão “ + e.Button +
 “ pressionado.”);
26. }
27. private void MeuBotao_MouseUp(object remetente, MouseEventArgs e)
28. {
29. MessageBox.Show(“MouseUp: Botão “ + e.Button + “ solto.”);
30. }
31. private void MeuBotao_MouseMove(object remetente, MouseEventArgs e)
32. {
33. this.Text = “MouseMove: Posição do mouse X: “ + e.X + “, Y: “ + e.Y;
34. }
35. private void MeuBotao_MouseWheel(object remetente, MouseEventArgs e)
36. {
37. MessageBox.Show(“MouseWheel: Rolagem do mouse “ + e.Delta);
38. }
39. }
40. }
Figura 50 – Manipulação de eventos do mouse
141
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Figura 51 – Exemplo da manipulação de eventos do mouse
 Lembrete
Como vimos na revisão do tópico 1.1, métodos delegados são 
um elemento central para gerenciar eventos de interface de usuário. 
Delegados  são fundamentais no modelo de evento em C# e permitem 
que métodos sejam passados como parâmetros e invocados quando 
um evento ocorre.
O conceito de delegado é mais bem ilustrado nesse contexto pela 
forma como os eventos do mouse são manipulados; cada linha de registro 
de evento – como na linha 12 da figura 50 – demonstra esse uso. Nessa 
linha, MouseEventHandler é um delegado que define uma assinatura de 
método específica; no caso, um método que recebeum objeto sender e 
um MouseEventArgs.
Ocorrido um evento como um clique do mouse, o Windows Forms procura 
métodos associados ao evento específico do objeto (no caso, meuBotao). Ao 
associar um método a um evento usando um delegado, como nas linhas 12 
a 16, o programador está instruindo o programa a chamar esses métodos 
quando o evento correspondente for disparado. Por exemplo, se meuBotao 
for clicado, o método MeuBotao_MouseClick será chamado. Cada método 
privado – como MeuBotao_MouseClick, MeuBotao_MouseDown, MeuBotao_
MouseUp etc. – é definido para lidar com o evento correspondente, seguindo 
a assinatura do delegado MouseEventHandler.
142
Unidade II
Lembre‑se: são chamados métodos de retorno de chamada ou 
callbacks pois são invocados em resposta a um evento externo – no caso, 
ações do usuário na interface gráfica. Essa abordagem é poderosa em 
aplicações orientadas a eventos, como aplicações de interface gráfica, pois 
permite alto grau de flexibilidade e reutilização de código. O programador 
pode definir comportamentos específicos para diferentes eventos de 
maneira organizada e modular, associando diferentes métodos a diferentes 
eventos de acordo com as necessidades da aplicação.
4.2 Interface de documentos múltiplos (multiple document interface – MDI)
É um padrão de design de interfaces de usuário que permite manipular múltiplos documentos 
simultaneamente dentro de uma única janela principal. Em C#, no contexto do Windows Forms, 
proporciona uma experiência de usuário eficiente e organizada, especialmente quando a interação com 
vários documentos ou vistas for uma necessidade comum.
Na implementação do MDI no Windows Forms, a janela principal do aplicativo atua como janela‑pai, 
enquanto os documentos individuais são abertos em janelas‑filhas internas, contidas e gerenciadas 
pela janela‑pai, permitindo ao usuário trabalhar com vários documentos sem precisar alternar entre 
janelas separadas fora do aplicativo. Esse design é útil em aplicações como editores de texto, sistemas de 
contabilidade e ambientes de desenvolvimento integrado, nos quais é crucial a facilidade de navegação 
entre vários documentos abertos.
Para criar uma aplicação MDI, o desenvolvedor primeiramente designa um formulário como a janela 
principal (MDI Parent). Isso é feito definindo a propriedade IsMdiContainer do formulário para true, 
numa ação que transforma o formulário em container para janelas‑filhas MDI. Posteriormente, outros 
formulários são criados e programados para agir como janelas‑filhas. Aberto um formulário‑filho, 
é necessário definir sua propriedade MdiParent para a janela‑pai MDI, indicando assim a relação 
de parentesco.
Um dos principais benefícios do MDI é a capacidade de gerenciar eficientemente múltiplas 
janelas‑filhas dentro de uma única interface, incluindo funcionalidades como organizar janelas‑filhas 
em cascata, horizontal ou verticalmente, e a capacidade de minimizar, maximizar e restaurar 
janelas‑filhas dentro do container‑pai. Além disso, o MDI permite comunicação entre janela‑pai 
e suas janelas‑filhas, facilitando o compartilhamento de dados e funcionalidades entre diferentes 
documentos ou vistas.
Apesar de suas vantagens, o MDI também apresenta desafios, como a complexidade na gestão 
de múltiplas janelas e a potencial confusão para o usuário ao lidar com muitas janelas abertas 
simultaneamente. Por isso o design e a implementação de uma aplicação MDI exigem consideração 
cuidadosa da experiência do usuário final, garantindo que a interface seja intuitiva e fácil de navegar.
143
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Para ilustrar a criação de um MDI, observe o seguinte roteiro:
• Criar um novo projeto:
— Abra o Visual Studio Community.
— Selecione Criar um Novo Projeto.
— Escolha Aplicativo Windows Forms App (.NET Framework) para C#.
— Nomeie o projeto e escolha um local para salvá‑lo, depois clique em Criar.
• Configurando a janela principal MDI:
— No projeto criado, você terá um formulário‑padrão (Form1), que será seu formulário 
MDI principal.
— No painel de propriedades, encontre IsMdiContainer e mude‑a para True. Isso transformará 
Form1 em um container MDI.
• Adicionando formulários‑filhos:
— No Solution Explorer, clique com o botão direito no projeto e escolha Add > Windows Form…
— Nomeie esse novo formulário (por exemplo, Form2) e adicione‑o ao projeto.
— Repita o processo para adicionar mais formulários‑filhos conforme necessário.
• Criando a lógica para abrir formulários‑filhos:
— Volte ao Form1 (formulário principal) e adicione um menu ou botões que serão usados para 
abrir os formulários‑filhos.
— Para cada item de menu ou botão, adicione um manipulador de eventos de clique.
— No manipulador de eventos, instancie o formulário‑filho e defina sua propriedade MdiParent 
para o formulário principal (na figura 52, as linhas 17 a 19 mostram um exemplo de 
instanciamento).
• Executando e testando a aplicação:
— Execute a aplicação pressionando F5 ou clicando no botão Start no Visual Studio.
— Teste a aplicação usando os menus ou botões que você criou para abrir os formulários‑filhos 
dentro do formulário principal.
• Aprimorando a experiência MDI:
— Você pode adicionar funcionalidades adicionais, como organizar as janelas‑filhas em cascata 
ou lado a lado através de opções de menu.
144
Unidade II
— Implemente lógica para evitar abrir múltiplas instâncias do mesmo formulário‑filho, 
se necessário.
• Personalização:
— Personalize os formulários‑filhos e o formulário principal conforme necessário, ajustando 
propriedades como tamanho, ícones, barras de ferramentas etc.
Figura 52 – MDI: janela‑filha (Form2) dentro da janela‑pai (Form1) após clique do botão
No exemplo, cada clique abre uma nova instância de Form2. Para evitar isso, podemos implementar 
a lógica descrita no passo 6 do roteiro. É necessário incluir no código‑fonte de Form1 um método que 
verifica se um dado Form já foi instanciado. Na linha 13 da figura 53 criamos o método FormJaAberto 
com essa função, usado no evento de clique do botão (linha 24), obtendo o efeito desejado.
Figura 53 – MDI: múltiplos cliques no botão não criam novas instâncias de Form2
145
PROGRAMAÇÃO ORIENTADA A OBJETOS II
MDI é mais adequado para aplicações que necessitam de múltiplas janelas interagindo simultaneamente, 
como editores de texto ou aplicações de email. Com a evolução das práticas de design de interfaces, o 
modelo de janela única com abas (como o usado em navegadores web modernos) tem se tornado mais 
popular, mas o MDI ainda é útil em certos contextos:
• Aplicações de edição complexas: programas como editores de texto avançados, ambientes de 
desenvolvimento integrado (IDEs) e softwares de design gráfico frequentemente utilizam o modelo 
MDI. Isso permite aos usuários trabalhar com múltiplos documentos ou projetos simultaneamente, 
facilitando a comparação e a transferência de informações.
• Softwares científicos e de análise de dados: aplicações que envolvem análise intensiva de 
dados, como softwares estatísticos ou de modelagem científica, podem se beneficiar do MDI. Isso 
permite que os usuários visualizem múltiplos conjuntos de dados ou resultados de análise em 
janelas separadas, facilitando a comparação e a interpretação.
• Ferramentas de monitoramento e controle: em ambientes de monitoramento – como centros 
de controle de tráfego ou sistemas de gerenciamento de redes –, o MDI pode ser útil para observar 
várias fontes de informação simultaneamente, permitindo uma rápida resposta a eventos ou 
alterações em diferentes sistemas ou localizações.
• Aplicações financeiras e de negócios: em softwares usados para contabilidade, gerenciamento 
financeiro ou planejamento de recursos empresariais (ERP), o MDI permite que os usuários 
mantenham abertas diversas formas de informação financeira, como balanços, relatórios de 
despesas e faturas, facilitando o acesso e a comparação de dados.
• Softwares de gestão de documentos: sistemas de gestão de documentos ou arquivos– onde é 
comum trabalhar com múltiplos documentos simultaneamente – podem aproveitar o MDI para 
melhorar a eficiência do fluxo de trabalho e a organização.
• Aplicações de email e comunicação: clientes de email ou softwares de comunicação 
empresarial que precisam gerenciar múltiplas conversas ou tópicos podem se beneficiar, ao 
mesmo tempo, do MDI.
• Softwares de desenho assistido por computador (CAD): aplicações de CAD frequentemente 
usam MDI para permitir que engenheiros e designers trabalhem em vários componentes ou vistas 
de um projeto simultaneamente.
• Aplicações educacionais e de treinamento: softwares educacionais que requerem a 
manipulação ou visualização de múltiplos materiais de aprendizagem podem, ao mesmo tempo, 
achar o MDI uma opção eficiente.
146
Unidade II
4.3 Projeto básico: juntando todas as partes com interface 
humano‑computador (IHC) e user experience (UX)
IHC é uma área multidisciplinar focada em design, avaliação e implementação de sistemas 
computacionais interativos para uso humano e no estudo de fenômenos relacionados. Seu objetivo 
principal é criar sistemas que não apenas sejam eficientes em termos de desempenho computacional, 
mas também fáceis e intuitivos, melhorando a experiência do usuário.
O campo da IHC considera aspectos como usabilidade, ergonomia, design de interface, UX 
e  acessibilidade – elementos essenciais para desenvolver sistemas que atendam às necessidades e 
preferências dos usuários. Ela envolve uma variedade de disciplinas, incluindo ciência da computação, 
design gráfico, psicologia, sociologia e engenharia cognitiva, cada uma contribuindo com perspectivas 
únicas e indispensáveis para compreender como os seres humanos interagem com computadores.
Em sua essência, IHC é guiada pelo princípio de que os sistemas computacionais devem ser 
projetados considerando características humanas, o que implica entender como pessoas processam 
informações, como aprendem, quais são suas limitações e habilidades, e como contextos sociais 
e culturais influenciam sua interação com a tecnologia. Por exemplo, um sistema projetado para 
pessoas idosas pode exigir interfaces de usuário com fontes maiores e mais contraste, considerando 
mudanças visuais decorrentes da idade.
Além disso, IHC aborda acessibilidade e garante que pessoas com diferentes tipos de deficiência 
possam usar sistemas computacionais de forma eficaz, incluindo o desenvolvimento de tecnologias 
assistivas e a adaptação de interfaces existentes para atender às necessidades específicas desses usuários. 
O processo de design em IHC geralmente envolve abordagem iterativa, em que protótipos são criados 
e testados com usuários reais. Isso permite que designers e desenvolvedores refinem continuamente 
o sistema com base no feedback do usuário, garantindo que o produto final seja tanto funcional 
quanto agradável.
A experiência do usuário (UX, do inglês user experience) é uma disciplina focada em design e 
implementação de produtos e serviços que proporcionam experiências significativas para os usuários. 
Essa abordagem coloca os usuários no centro do processo de desenvolvimento, buscando entender 
suas necessidades, desejos e comportamentos para criar soluções que não apenas atendam, mas também 
superem suas expectativas.
No cerne da UX está a compreensão de que um produto ou serviço deve ser mais do que funcional e 
eficiente; deve ser intuitivo, agradável e emocionalmente gratificante de usar. Isso envolve um processo 
de design cuidadoso, que considera todos os aspectos da interação do usuário com o produto, desde o 
momento em que toma conhecimento dele até o uso efetivo e eventual desengajamento.
Para alcançar uma ótima experiência do usuário, profissionais de UX utilizam uma variedade 
de técnicas e métodos, incluindo pesquisa de usuário, design de interação, prototipagem, testes de 
usabilidade e design visual. A pesquisa de usuário, por exemplo, ajuda a revelar insights sobre suas 
147
PROGRAMAÇÃO ORIENTADA A OBJETOS II
necessidades e motivações, enquanto os testes de usabilidade permitem avaliar como interagem com o 
produto e onde podem surgir problemas.
Outrossim, UX se estende para além do próprio produto, abrangendo todos os pontos de contato de 
um usuário com a marca ou empresa, incluindo embalagem, suporte ao cliente e até mesmo o processo 
de compra. Uma boa UX em todos esses pontos de contato contribui para a satisfação geral do usuário 
e fidelidade à marca, tornando‑se dinâmica e evolutiva, adaptando‑se às mudanças nas expectativas 
dos usuários e nas tendências tecnológicas. Com o avanço da tecnologia – como inteligência artificial e 
realidade virtual –, a UX continua a explorar novas formas de criar experiências imersivas e personalizadas.
A distinção entre IHC e UX reside principalmente na abrangência e no foco de cada campo. Enquanto 
a IHC é uma disciplina mais ampla que engloba design, implementação e avaliação de interfaces 
interativas, UX concentra‑se especificamente na experiência total do usuário ao interagir com um 
produto ou serviço. Enquanto a IHC é mais orientada para a funcionalidade e eficácia da interação entre 
usuário e computador, a UX é orientada para a satisfação e o engajamento geral do usuário. UX busca 
entender e atender às necessidades e desejos dos usuários, criando experiências não apenas funcionais, 
mas também agradáveis, envolventes e memoráveis.
 Saiba mais
No campo da IHC, o livro Design de interação: além da interação 
homem‑computador, de Yvonne Rogers, Helen Sharp e Jenny Preece, é uma 
excelente referência, pois a aborda por uma perspectiva ampla, discutindo 
teorias, métodos, técnicas e práticas, sendo reconhecido por sua abordagem 
abrangente e detalhada. É leitura essencial para quem deseja se aprofundar 
nesse estudo.
ROGERS, Y.; SHARP, H.; PREECE, J. Design de interação: além da interação 
humano‑computador. Porto Alegre: Bookman, 2013.
Para referência em UX, recomendamos Não me faça pensar: atualizado, 
de Steve Krug, um clássico na área de design de usabilidade que oferece 
insights valiosos de forma clara e acessível. O autor aborda princípios 
fundamentais de design de interfaces web de forma prática, tornando‑o 
um recurso indispensável para profissionais e estudantes interessados.
KRUG, S. Não me faça pensar: atualizado. São Paulo: Alta Books, 2014.
Ambos os livros são altamente respeitados em suas respectivas 
áreas e oferecem um conhecimento fundamental tanto para iniciantes 
quanto profissionais experientes que desejam aprofundar seu conhecimento 
em UX e IHC.
148
Unidade II
Windows Forms oferece uma plataforma robusta e flexível para implementar conceitos de IHC e UX 
em vários cenários. Sua capacidade de criar interfaces de usuário personalizáveis, intuitivas e eficientes 
o torna uma escolha valiosa para desenvolvedores que buscam entregar aplicações que atendam às 
necessidades funcionais dos usuários e proporcionem uma experiência satisfatória e enriquecedora.
Um dos cenários de destaque do Windows Forms é o desenvolvimento de aplicações de desktop 
para ambientes corporativos, onde eficiência e facilidade de uso são cruciais. As aplicações devem ser 
intuitivas para que os funcionários cumpram suas tarefas com eficácia e sem precisar de treinamentos 
extensos. Com o Windows Forms é possível criar interfaces claras e consistentes, com controles familiares 
como caixas de texto, botões e menus, facilitando a curva de aprendizado e melhorando a produtividade.
Também é relevante criar softwares personalizados para necessidades específicas de negócios, 
pois empresas muitas vezes necessitam de aplicações que se ajustem exatamente a suas operações e 
processos. Usando Windows Forms com C#, desenvolvedores podem construir aplicações customizadas 
que se encaixam perfeitamente nas demandas específicas, melhorando a eficiência operacional e a 
satisfação do usuário.
Em termos de desenvolvimento de aplicações educacionais, o Windows Forms pode ser uma 
ferramenta valiosa pois, para aplicaçõesque visam ensinar conceitos complexos ou habilidades 
específicas, uma interface bem projetada é essencial. O recurso permite criar interfaces interativas e 
envolventes que podem tornar o aprendizado mais intuitivo e eficaz. Na construção de ferramentas 
de software para áreas como saúde ou finanças – onde precisão e facilidade de uso são de suma 
importância –, o Windows Forms com C# também se mostra útil. Interfaces claras e bem organizadas 
reduzem o risco de erros, uma consideração crítica quando decisões baseadas em dados incorretos 
podem ter consequências graves.
Por fim, o Windows Forms é benéfico na prototipagem rápida de aplicações. Em estágios iniciais de 
desenvolvimento, é vital testar ideias e conceitos de interface com usuários reais. Ele permite a rápida 
construção de protótipos funcionais e facilita o feedback e refinamento contínuo da UX. Se quisermos 
adaptar Os desafios dos mosqueteiros: duelos & destinos para Windows Forms focando conceitos de UX 
e IHC, diversos aspectos devem ser considerados, conforme análise preliminar do quadro 19.
Quadro 19 – Aspectos de UX e IHC na adaptação do jogo para Windows Forms
Clareza visual e estética
(IHC e UX)
Design do tabuleiro: o tabuleiro deve ser visualmente atraente e claro, com uma 
representação estilizada da França do século XVII. Cada espaço deve ser facilmente 
identificável, e as instruções associadas a cada espaço devem ser legíveis
Design das cartas de evento: as cartas devem ter um design que remeta à época, 
com texto claro e legível. Pode‑se considerar animações ou efeitos visuais para 
realçar eventos importantes
Intuitividade e facilidade de 
uso (UX)
Interface de usuário: a interface deve ser intuitiva e permitir que os jogadores 
compreendam facilmente como jogar o dado, girar a roleta e mover as peças. 
Pode‑se conseguir isso com botões claramente marcados e tutoriais interativos
Fluxo de jogo: deve haver uma sequência lógica e fácil de seguir, com indicações 
claras de qual é a vez de cada jogador e o que deve ser feito em cada etapa
149
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Feedback e interação (IHC)
Feedback visual e sonoro: quando um jogador realiza uma ação, como jogar um 
dado ou girar a roleta, deve haver feedback imediato, seja visual (animação), sonoro 
ou ambos
Diálogos e alertas: mensagens claras devem ser exibidas para eventos importantes, 
como quando um jogador ganha ou perde fichas, ou diante de um evento especial
Acessibilidade (IHC e UX)
Fontes e cores: usar fontes de fácil leitura e um esquema de cores que seja 
acessível para usuários com deficiência visual
Opções de personalização: permitir que jogadores ajustem configurações para 
melhorar a acessibilidade, como tamanho do texto e contraste de cores
Engajamento e imersão (UX)
Narrativa e temática: incorporar elementos narrativos e temáticos que envolvam 
os jogadores na história dos mosqueteiros, melhorando a imersão e o engajamento
Elementos interativos: incluir elementos interativos, como animações nas cartas 
de evento e no som ambiente, para enriquecer a experiência
Usabilidade e 
desempenho (IHC)
Tempo de resposta: o jogo deve responder rapidamente às ações dos jogadores, 
sem atrasos perceptíveis
Estabilidade e confiabilidade: garantir que o jogo seja estável, sem erros nem 
travamentos, proporcionando uma experiência de usuário suave e confiável
Testes e iteração (UX)
Testes de usabilidade: fazer testes com usuários reais para identificar problemas de 
usabilidade e áreas de melhoria
Iteração com base no feedback: ajustar o design e a funcionalidade do jogo com 
base no feedback dos usuários para melhorar continuamente a experiência
Implementados esses conceitos de UX e IHC, criaremos um jogo em Windows Forms que não só é 
funcional e eficiente, mas também oferece uma experiência rica e envolvente, imergindo jogadores no 
mundo dos mosqueteiros de maneira interativa e divertida.
Figura 54 – Os desafios dos mosqueteiros: duelos & destinos na versão de console
Não é simples a transição entre um modelo de jogo simples como o usado no tópico 1 (figura 54) 
e um com interface rica e agradável. Porém, graças ao modelo orientado a objetos, grande parte do 
código pode ser reaproveitado – como as classes Baralho, Casas, Tabuleiro, entre outras. A figura 55 
mostra uma possibilidade de implementar uma interface amigável no jogo em Windows Forms.
150
Unidade II
Figura 55 – Os desafios dos mosqueteiros: duelos & destinos na versão Windows Forms
A figura 55 também ilustra quatro elementos gráficos utilizados no jogo, relacionados à mecânica 
e à representação dos dados. No canto superior esquerdo foi criado uma GroupBox com a propriedade 
BackColor, configurada para Transparent e com duas imagens (inseridas na GroupBox pelo controle 
PictureBox) que representam as fichas do jogador (Fortuna e Honra). Essas imagens também contêm 
labels com o número de fichas atualizado para o jogador que está no turno. O nome do jogador atual 
aparece como texto da GroupBox, configurado com fonte Old English Text MT, cuja tipografia 
remete ao tema do jogo.
Na figura 56 vemos as imagens criadas para representar as fichas.
151
PROGRAMAÇÃO ORIENTADA A OBJETOS II
Figura 56 – Imagens nos elementos gráficos do jogo que representam, respectivamente: fichas de 
fortuna e honra, cartas de evento (verso e frente) e dado (ativo e escuro). Imagens produzidas pelo próprio autor 
com tecnologia DALL‑E, ferramenta de inteligência artificial desenvolvida pela OpenAI
No canto inferior esquerdo do formulário do jogo (figura 55) foi colocada uma imagem do verso 
de uma carta, representando as cartas de evento. Quando um jogador recebe uma, essa imagem é 
alterada (simulando a frente da carta) para destacar que foi recebida pelo jogador atual. No exemplo só 
criamos uma carta frente para representar a virada de uma carta de evento, mas também poderíamos 
ter criado uma carta de evento temática para cada evento do jogo, aumentando ainda mais a imersão.
Na figura 56 também vemos as imagens criadas para representar cartas (frente e verso). O terceiro 
elemento gráfico é um dado, colocado no canto inferior direito – um botão cujo clique sorteia um 
número e faz o jogo avançar. A imagem do dado foi colocada na propriedade BackGroundImage do botão 
com o BackGroundImageLayout em Stretch (a propriedade BackColor foi configurada para Transparent, 
para que o botão não tivesse o formato quadrado padrão, e a propriedade FlatStyle foi configurada para 
Flat, e zeramos a BorderSize em FlatAppearance).
152
Unidade II
Para oferecer ao usuário o feedback visual do clique no botão, a imagem do dado é temporariamente 
alterada para uma imagem um pouco mais escura (figura 56), usando para isso os eventos de 
manipulação do mouse, conforme o trecho de código‑fonte da figura 57. Além disso, o quarto elemento 
gráfico – posicionado entre a carta de evento e o dado – é um label com as mensagens de cada turno.
Esse label, cuja fonte também foi configurada para Old English Text MT e com cor de fundo 
(propriedade BackColor=DarkSlateGrey) compatível com a paleta de cores do jogo, fornecerá todas 
as mensagens de andamento de jogo antes colocadas em Console.Writeline na versão original para 
console. São mensagens sobre o número de casas que o jogador tirou no dado, o nome do jogador que 
precisa clicar no dado, eventos das cartas especiais e demais mensagens do jogo.
Por fim, cinco botões (em DarkSlateGrey) ficam “invisíveis” na interface na maior parte do jogo, 
sendo necessários para duas interações distintas: os duelos – quando o jogador precisa escolher com 
qual mosqueteiro vai se confrontar – e a audiência com o rei – quando o jogador precisa escolher se 
prefere o reconhecimento da corte ou a roleta do julgamento real.
1. private void dadoBotao_MouseDown(object sender, MouseEventArgs e)
2. {
3. // Alterar a imagem do botão para a versão mais escura ao clicar
4. dadoBotao.BackgroundImage = Properties.Resources.DadoEscuro;
5. }
6.
7. private void dadoBotao

Mais conteúdos dessa disciplina