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;


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#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



#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,


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#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.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




 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