Ir para o conteúdo do rodapé
Iron Academy Logo
Aplicação C#
Aplicação C#

Outras categorias

Salvar Dados de Formulário em C# para Arquivo: Um Mergulho Profundo com Tim Corey

Tim Corey
1h 19m 10s

C Salvar Dados do Formulário em Arquivo: Uma Análise Detalhada com Tim Corey (Lição 23)

Guardar os dados inseridos pelo usuário de forma confiável é uma das responsabilidades mais importantes de um aplicativo de desktop. Você pode criar um aplicativo de Formulário do Windows no Visual Studio no Windows para implementar a funcionalidade de salvamento de arquivo. Na Lição 23 da série 'C# App Start to Finish', Tim Corey explica exatamente como um aplicativo WinForms pega os dados inseridos em um formulário, valida-os, atualiza modelos na memória e, finalmente, os persiste em um banco de dados ou um arquivo de texto.

Neste artigo, vamos dar uma olhada mais profunda em salvar dados de formulário C# em um arquivo, explicando estritamente o vídeo de Tim passo a passo. Cobriremos como iniciar um novo projeto no Visual Studio, projetar o Formulário do Windows com controles como caixas de texto e usar componentes como SaveFileDialog para permitir que os usuários naveguem e selecionem um caminho e tipo de arquivo (por exemplo, csv, jpeg) usando filtros. O objetivo é entender como e por que Tim conecta as coisas nesta lição para que os leitores possam acompanhar com clareza.

Revisão do Visionador de Torneio e Meta de Hoje

Às 0:01, Tim dá as boas-vindas aos espectadores para a Lição 23 e explica que o foco de hoje é terminar o formulário Visionador de Torneio. Ele nos lembra que a maior parte da IU já está conectada:

  • a lista suspensa de rodadas

  • a lista de confrontos

  • os rótulos dos nomes das equipes

  • as caixas de texto de pontuação

Você pode definir propriedades como a propriedade Multiline para as caixas de texto de pontuação para permitir que os usuários preencham mais dados, se necessário.

Tim explica que hoje ele irá conectar duas peças restantes:

  1. A caixa de seleção 'Somente Não Jogados'

  2. O botão de Pontuação, incluindo o salvamento dos resultados no armazenamento

Depois de adicionar o botão de Pontuação, você pode clicar com o botão direito no formulário e selecionar 'Ver Código' no Visual Studio para conectar os manipuladores de eventos.

Ele afirma claramente que depois que o botão de Pontuação estiver funcionando, o aplicativo salvará dados em um banco de dados ou um arquivo de texto, que é onde nosso tópico principal entra em cena.

Filtrando Confrontos com a Caixa de Seleção 'Somente Não Jogados'

À 1:02, Tim abre a janela de Propriedades da caixa de seleção e dá um clique duplo no evento CheckedChanged. Ele explica que sempre que a caixa de seleção muda de estado, a lista de confrontos deve ser recarregada.

Tim aponta que a lógica já existe em um método chamado LoadMatchups, então em vez de reinventar qualquer coisa, ele simplesmente chama esse método novamente a partir do evento da caixa de seleção.

Por volta de 1:57, Tim modifica o LoadMatchups para incluir lógica condicional. Ele passa por adicionar uma instrução if que verifica se o Vencedor de um confronto é nulo. Se for, o confronto ainda não foi jogado.

Então, às 3:10, Tim introduz a condição OR que faz a caixa de seleção funcionar. Ele explica a lógica em termos simples:

  • Se um confronto não tiver vencedor, mostre-o

  • OU, se a caixa de seleção estiver desmarcada, mostre tudo

Tim explica cuidadosamente as tabelas de verdade verbalmente, explicando por que:

  • marcado + concluído = oculto

  • desmarcado = sempre visível

Ele até sugere desenhar essa lógica no papel quando as condições se tornam complexas.

Conectando o Botão de Pontuação e Lendo Valores do Formulário

À 5:45, Tim dá um clique duplo no evento do botão de Pontuação. Ele explica que clicar neste botão deve:

  1. Ler valores do formulário (a entrada é tipicamente tratada como uma string, que será processada e a saída salva em um arquivo)

  2. Atualizar o objeto de confronto subjacente (essa lógica está encapsulada em uma classe)

  3. Decidir um vencedor

À 6:26, Tim recupera o confronto selecionado da lista e explica que esse objeto determina quais equipes pertencem ao 'Time Um' e 'Time Dois'.

Ele então mostra como percorrer as entradas do confronto e explica que em vez de definir campos de texto, o objetivo agora é pegar valores de texto e salvá-los nas propriedades de pontuação. O código a seguir demonstra como escrever os dados para um arquivo.

À 7:45, Tim converte a entrada de texto em doubles e imediatamente faz uma pausa para alertar sobre entradas inválidas do usuário. Ele enfatiza que os dados inseridos pelo usuário devem sempre ser validados.

Validando Entrada com TryParse

À 8:39, Tim refatora a análise de pontuação para uma abordagem mais segura usando double.TryParse. Ele explica que isso previne que o aplicativo trave se um usuário digitar algo inválido como texto em vez de um número.

À 10:20, Tim envolve a lógica de análise em uma instrução if:

  • Se a análise for bem-sucedida, continue

  • Se falhar, exiba uma caixa de mensagem e retorne

Ele explica que usar return sai do método imediatamente, impedindo que dados ruins se espalhem ainda mais no sistema.

Esse padrão é repetido tanto para as pontuações do Time Um como do Time Dois.

Determinando o Vencedor e Lidando com Casos Especiais

À 14:25, Tim compara as duas pontuações para determinar um vencedor. Se a pontuação do Time Um for maior, essa equipe é indicada como vencedora do confronto.

À 16:41, Tim discute as regras de pontuação e explica que seu aplicativo assume que uma pontuação mais alta vence. Ele observa que se alguém quisesse suportar vitórias de pontuações mais baixas (como golfe), essa lógica poderia ser invertida ou tornada configurável.

À 17:42, Tim lida com empates explicitamente. Em vez de silenciosamente escolher um vencedor, ele exibe uma mensagem dizendo que empates não são suportados e evita intencionalmente salvar um vencedor.

Corrigindo Erros e Gerenciando a Visibilidade da IU

À 20:14, Tim encontra um erro quando nenhum confronto não jogado permanece. Ele explica por que chamar .First() em uma lista vazia causa uma exceção e corrige isso verificando primeiro a contagem da lista.

De 23:05 em diante, Tim explica sua filosofia de depuração. Ele recomenda fortemente escrever erros no papel para evitar distrações digitais e manter o foco.

À 24:49, Tim introduz um novo método chamado DisplayMatchupInfo. Ele explica que elementos da IU como rótulos, caixas de texto e o botão de Pontuação só devem estar visíveis quando um confronto estiver selecionado.

Por volta de 28:28, todos os controles relacionados alteram a visibilidade automaticamente com base em se há uma seleção válida.

Atualizando a Lista Após a Pontuação

À 29:57, Tim explica que após clicar em Pontuar, a lista de confrontos deve ser atualizada imediatamente. Ele simplesmente chama LoadMatchups() novamente no final da lógica do botão de Pontuação.

Ele demonstra que uma vez que um confronto é pontuado, ele desaparece da lista quando 'Somente Não Jogados' está marcado.

Salvando Dados do Confronto no Banco de Dados

À 31:16, Tim faz a transição para salvar dados. Ele introduz um novo método na interface de acesso a dados chamado UpdateMatchup.

À 33:14, Tim explica por que este método retorna void. Ele enfatiza que os objetos são passados por referência, então atualizá-los atualiza os dados originais.

Ele então cria procedimentos armazenados:

  • Um para atualizar o vencedor do confronto

  • Um para atualizar entradas de confronto e pontuações

Tim adverte fortemente às 38:08 sobre a ausência de cláusulas WHERE em atualizações SQL, explicando como um único erro pode sobrescrever todos os registros.

À 49:58, ele chama GlobalConfig.Connection.UpdateMatchup(m) a partir do formulário, salvando oficialmente os dados no armazenamento persistente.

Atualizando e Salvando Confrontos em um Arquivo de Texto

À 52:32, Tim muda para o conector de arquivo de texto. Ele explica que a maior parte do código já existe e pode ser adaptada.

Após salvar em um arquivo de texto, é importante notar que todas as operações de arquivo em C exigem a inclusão da biblioteca e o uso de um ponteiro FILE. Salvar dados em C segue um processo de três etapas: abrir o arquivo (com o caminho correto e o nome do arquivo), escrever os dados (usando fprintf() para arquivos de texto ou fwrite() para arquivos binários), e fechar o arquivo com fclose() para garantir que toda a saída seja propriamente salva. Por exemplo, você pode preencher uma caixa de texto e salvar seu conteúdo em um arquivo de texto em um caminho especificado usando o seguinte código. A saída será escrita no arquivo que você especificar.

Ao usar o componente SaveFileDialog em .NET, os usuários podem navegar pelo sistema de arquivos e selecionar arquivos para serem salvos. A caixa de diálogo retorna o caminho e o nome do arquivo selecionado pelo usuário, e você pode usar a propriedade DialogResult para obter o nome do arquivo. Após selecionar um arquivo, você deve escrever o código para realmente escrever os arquivos no disco. O método OpenFile de SaveFileDialog lhe dá um objeto Stream que você pode escrever, permitindo que você salve a saída no arquivo selecionado.

À 53:49, Tim compartilha uma filosofia chave:

"É mais importante fazer seu aplicativo funcionar do que escrever um código incrível."

Ele copia a lógica de salvamento existente e a modifica em UpdateMatchupToFile. Em vez de adicionar novos registros, ele remove o confronto antigo e o substitui pelo atualizado.

À 59:27, Tim repete esse mesmo padrão para entradas de confronto, garantindo que pontuações e atribuições de equipe sejam atualizadas corretamente no arquivo.

Por volta de 1:02:44, Tim demonstra reiniciar o aplicativo e confirma que os dados persistem, provando que os dados do formulário foram salvos com sucesso no arquivo.

Para lidar com arquivos CSV em aplicativos .NET WinForms, você pode importar arquivos CSV usando o método LoadTextFile da classe SheetView, exportar arquivos CSV usando o método SaveTextFile, e converter arquivos CSV para o formato Excel XLSX usando os métodos SaveExcel da classe FpSpread. O componente Spread.NET fornece funcionalidade robusta de manipulação de arquivos CSV, tornando fácil gerenciar arquivos CSV dentro do seu aplicativo. Para um projeto de exemplo e guia passo a passo, veja este blog ou baixe o aplicativo de exemplo demonstrando essa funcionalidade.

Considerações Finais de Tim Corey

Nos minutos finais, Tim explica que salvar dados é apenas parte do processo. Uma vez que um confronto está completo, a equipe vencedora deve avançar para a próxima rodada, o que ele começa a conectar a seguir.

Ele termina a lição enfatizando validação cuidadosa, progresso incremental, e foco em software funcional primeiro, com refatoração mais tarde. Esperamos que este artigo seja útil para você e que a solução fornecida o ajude a implementar c salvar dados de formulário em arquivo em seus próprios projetos.

Resumo

Nesta lição, Tim Corey mostra—passo a passo—como dados de formulário WinForms C# fluem de UI → validação → atualizações de modelo → armazenamento de arquivo. O artigo fornece um exemplo e um fluxo de trabalho de exemplo para salvar dados do formulário em um arquivo. Depois de escrever o código, você pode executar o projeto pressionando F5 no Visual Studio para testar a funcionalidade. Ao seguir sua abordagem, os desenvolvedores podem ver claramente como aplicativos reais salvam com segurança a entrada do usuário sem perder dados ou travar.

Esta lição é um modelo prático para salvar dados de formulário da maneira certa, exatamente como Tim ensina.

Hero Worlddot related to Salvar Dados de Formulário em C# para Arquivo: Um Mergulho Profundo com Tim Corey
Hero Affiliate related to Salvar Dados de Formulário em C# para Arquivo: Um Mergulho Profundo com Tim Corey

Ganhe mais compartilhando o que você ama.

Você cria conteúdo para desenvolvedores que trabalham com .NET, C#, Java, Python ou Node.js? Transforme sua expertise em renda extra!

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim