Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como conseguir que um programa leia um arquivo criado com um nome dado pelo usuário?

Boa tarde, Estou fazendo uma aplicação windows forms que onde o usuário vota nos indicados ao prêmio Jogo Do Ano em várias categorias (uma por form). Primeiro ele teria que digitar o próprio nome em uma textbar e ao clicar em um botão, um arquivo será criado possuindo esse mesmo nome, dessa forma:

public partial class PaginaInicialForm : Form
    {
        public PaginaInicialForm()
        {
            InitializeComponent();

        }
        private void TextBox1_TextChanged(object sender, EventArgs e)
        {
            btnProximo1.Enabled = true;
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            //Criar arquivo com nome digitado
            var arquivo = tbNome.Text;
            using (var fluxoDeArquivo = new FileStream(arquivo, FileMode.Create))
            using (var escritor = new StreamWriter(fluxoDeArquivo, Encoding.UTF8))
            {
                escritor.WriteLine(tbNome.Text);
                escritor.Flush();
            }
           //Chamada do próximo form
            this.Hide();
            GameOfTheYearForm form2 = new GameOfTheYearForm();
            form2.Show();

        }
    }

No segundo form, ele irá votar no jogo que escolher e eu queria poder escrever esse voto no mesmo arquivo, previamente criado. Tentei fazer dessa forma:

public partial class GameOfTheYearForm : Form
    {
        public GameOfTheYearForm()
        {
            InitializeComponent();
            CarregarCbb();
        }

        private void BtnConfirma1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Voto Confirmado!");
            PaginaInicialForm form1 = new PaginaInicialForm();
            var arquivo = form1.tbNome.Text.ToString();
            using (var fluxoDeArquivo = new FileStream(arquivo, FileMode.Append))
            using (var escritor = new StreamWriter(fluxoDeArquivo, Encoding.UTF8))
            {
                escritor.WriteLine($"Jogo do ano selecionado: {cbbJogoDoAno.Text.ToString()}");
                escritor.Flush();
            }
            btnNext1.Enabled = true;
        }

    }

Mas no segundo form, ao clicar no botão e fechar a MessageBox, eu recebo uma exceção falando que o caminho está vazio. Como se não houvesse mais nenhuma informação escrita no TextBoxdo form anterior. Queria saber se tem alguma solução simples para isso...

Desde já agradeço.

2 respostas

Olá groquesouza, como vai?

Não costumo utilizar o WinForms, mas com a linha PaginaInicialForm form1 = new PaginaInicialForm();, você cria um formulário novo, sem nenhum valor. Esse formulário deveria ser criado antes de clicar, assim, você está passando um campo de um objeto recém-criado.

Sinceramente, precisaria dar uma olhada no projeto para tentar achar uma solução. Se quiser compartilhar seu projeto, posso dar uma olhada.

No aguardo!

solução!

Consegui resolver meu problema. No segundo form foi preciso adicionar essa linha de código:

        System.Windows.Forms.Form f = System.Windows.Forms.Application.OpenForms["PaginaInicialForm"];

Em seguida, dentro do botão que é responsável por abrir o arquivo eu chamei assim:

 var arquivoCriado = $"{((PaginaInicialForm)f).tbNome.Text}.txt";

Passando a variável arquivoCriado no FileMode, ele conseguiu abrir o arquivo com nome dado pelo usuário, e escrever nele as informações desse form.