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

Duvida sobre aplicação e threads

Boa tarde pessoal,

Estou desenvolvendo uma aplicação em C# e aprendendo cada dia um pouco mais.. Porém travei em uma parte da qual não consigo ir adiante.

Gostaria de tirar uma duvida utilizando desse exemplo:

  • Em Windows Forms ao iniciar a aplicação, é exibido um Form1 com uma ListView.
  • O Form1 possui um botão para registrar um novo paciente, e esse botao do Form1 quando clicado inicializa o Form2.

É possível atualizar a ListView do Form1 a partir de um botão do Form2?

Ou para isso ocorrer é necessário estar rodando os dois Forms paralelamente utilizando threads? Não sei se depois de inicializar o Form2, o Form1 fica pausado.

Gostaria de sugestões, obrigado.

3 respostas
solução!

Boa tarde Felipe, tudo bom?

Então, primeiramente: é possível sim... hehehe

Imagino que você queira cadastrar diretamente pelo Form2 e ao voltar para o Form1 você tenha esse paciente disponível na ListView (me corrija se eu estiver errado).

Então, uma vez seguindo essa linha de raciocínio, é necessário que você crie uma ligação entre o Form1 e o Form2, esta ligação pode ser feitas de muitas formas diferentes.

No exemplo que eu fiz, ficou da seguinte forma: (Usei TextBox no lugar de listView, mas funciona igual)

//Este aqui é o form1

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 cadastro = new Form2(this);
            cadastro.Show();
        }

        public void AdicionarLista(string nome, string sobrenome, string idade) {
            txtLista.Text += $"{nome} {sobrenome} {idade} \n";
        }
    }
}

//Este aqui é o form2

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form2 : Form
    {
        Form1 _formulario1;
        public Form2(Form1 formulario1)
        {
            InitializeComponent();
            _formulario1 = formulario1;
        }

        private void btnCadastrar_Click(object sender, EventArgs e)
        {
            _formulario1.AdicionarLista(txtNome.Text, txtSobrenome.Text, txtIdade.Text);
        }
    }
}

Espero ter ajudado, o exemplo é bem simples.

Exatamente isso, muito obrigado!

Só gostaria de saber o porque do "this" na criação da nova instancia do Form2 realizada dentro do Form1.

Form2 cadastro = new Form2(this);

Olá Felipe, tudo bom?

Então, o uso da palavra reservada "this", serve para passar o Objeto atual.

Ela significa que está passando o próprio Objeto como parâmetro da instância, por exemplo:

Form2 cadastro = new Form2(Form1);

Então, a título de curiosidade, Todo Objeto passado por parâmetro, é alterado por referência. Ou seja, quando tu enviar o Form1, todos os seus componentes serão alterados pela posição da memória.

Para melhor assimilar isso, é como se fosse o (ByVal, ByRef) no VB.NET ou como se fosse o (&variável) em C.