PASSAR VALOR DE UM FORM PARA UMA CLASSE

 Tópico anterior Próximo tópico Novo tópico

PASSAR VALOR DE UM FORM PARA UMA CLASSE

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#483908 - 14/08/2018 11:25:52

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Última edição em 14/08/2018 11:27:38 por PERCIFILHO

Bom dia pessoal, mais uma vez recorro a vocês.
Criei uma classe com os métodos para as operações de CRUD de uma classe de produto.
Então eu tenho uma tabela de Grupo onde o usuário digita o código do grupo (ex: 01) e daí o método MontaCodigoProduto vai buscar na tabela de grupo e entre outras coisas, mostrar a descrição do  grupo em uma TextBox do form.
Minha dúvida é: como ter "acesso" a este TextBox para poder "jogar" a descrição nele.
Já coloquei os controles do form como Modifiers=public.
Se eu fizer referência ao form assim:
Cadastro form = new Cadastro();

não funciona pois ele vai fazer referência a um form vazio.
Minha classe é esta:
public class MetodosProduto
public static void MontaCodigoProduto(string codigoGrupo)
{
    using (Conexao db = new Conexao())
    {
    int codigo = Convert.ToInt32(codigoGrupo);
    Models.Grupo grupo = db.Grupo.SingleOrDefault(x => x.Id == codigo);
    form.txtDescricaoGrupo.Text = grupo.Descricao;   // aqui faço a referência ao form
    }
}


Preciso referenciar o form que está aberto;


____________________________________________________
Não há nessa vida algo que não se possa alcançar, você só precisa ir buscar.

#483909 - 14/08/2018 11:28:36

NICKOSOFT
SANTO ANDRE
Cadast. em:Maio/2009


sempre q preciso de algo parecido c isso utilizo function q retorna informacao.....
em geral consultas eu retorno um dataset ou datatable

Cada dia vejo surgirem novos "programadores" de código pronto aqui



#483914 - 14/08/2018 12:28:44

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Se eu entendi direito, o que você quer é "ligar" um form à uma entidade. Você abre o form já referenciando a entidade correspondente que será exibida nele. Se for isso, você vai fazer o seguinte:
1 - Criar uma propriedade no form tipada com a entidade que você quer fazer a ligação
2 - Criar um construtor no form, onde você pode passar o valor base para encontrar a entidade correspondente(exemplo, um form de produtos onde você passa o código do produto)
3 - Preencher os campos do form com as propriedades da entidade correspondente
4 - Atente também para os procedimentos de gravação, que devem seguir a mesma linha lógica acima

Use a coleção Application.OpenForms para ver se o form desejado já está aberto, referenciando-o ao invés de criar um novo, se é este o comportamento desejado

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#483922 - 14/08/2018 14:19:41

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Última edição em 14/08/2018 14:23:59 por PERCIFILHO

Na verdade é assim: talvez errei no título, seria passar valor da classe para o form.
Eu tenho um form de cadastro de produto, vou chamá-lo de Form1. Neste form tenho uma TextBox onde o usuário digita o código do grupo, por exemplo: 01.
No evento Leave da TextBox chamo um método que está numa classe chamada MetodosProduto, passando como parâmetro o codigo que foi digitado:
MétodosProdutos.MontaCodigoProduto(txtCodigoGrupo.Text);

Esse método vai procurar na tabela de Grupos pelo codigo passado no parâmetro e quando encontrar, terá que retornar a descrição do grupo, jogando essa descrição na txtDescricaoGrupo.Text do Form1.
Então imaginei o método mais ou menos assim:
public static void MontaCodigoProduto(string codigoGrupo)
{
    using (Conexao db = new Conexao())
    {
    int codigo = Convert.ToInt32(codigoGrupo);
    Models.Grupo grupo = db.Grupo.SingleOrDefault(x => x.Id == codigo);
    // aqui preencheria a descricao no Form1
    txtDescricaoGrupo.Text = grupo.Descricao
    }
}

Lembrando que.eu já setei a propriedade Modifiers como public,
Tentei
Form1.txtDescricaoGrupo.Text = grupo.Descricao

mas não funcionou.
Acho que agora expliquei melhor,


____________________________________________________
Não há nessa vida algo que não se possa alcançar, você só precisa ir buscar.

#483925 - 14/08/2018 14:27:45

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Como disse, você precisa usar a coleção Application.OpenForms. Busque nela o form de produtos, caso não exista, instancia, caso exista referencie. Você não pode passar valor à um form não instanciado. Se quiser passar valor ao form onde estiver, use "this".
Também largue mão de métodos estáticos para isso, eles não são aconselháveis para esse tipo de uso.

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


Resposta escolhida #483926 - 14/08/2018 14:28:55

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


Tenta fazer assim:

  

public static Models.Grupo MontaCodigoProduto(string codigoGrupo)
{
Models.Grupo grupo = null;
    using (Conexao db = new Conexao())
    {
    int codigo = Convert.ToInt32(codigoGrupo);
    grupo = db.Grupo.SingleOrDefault(x => x.Id == codigo);
    }
return grupo;
}



  

//No evento leave
var retorno = MétodosProdutos.MontaCodigoProduto(txtCodigoGrupo.Text);
if (retorno != null)
{
      txtDescricaoGrupo.Text = retorno.Descricao
}



Desta forma, você pode utilizar este método para outras finalidades, ou para outros formulários, em fim, fica desacoplado.



#483943 - 15/08/2018 08:59:44

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Valeu Guimoraes era exatamente isso que eu estava precisando.
Muito obrigado pela ajuda.

____________________________________________________
Não há nessa vida algo que não se possa alcançar, você só precisa ir buscar.

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PERCIFILHO em 16/08/2018 07:36:58