none
Botão salvar à partir de um MDI. RRS feed

  • Pergunta

  • Pessoal, boa tarde.

    Sou novo por aqui, e não sei bem como começar. Estou aprendendo o C# e não estou conseguindo fazer uma tarefa aparentemente simples. Espero que vocês possam me ajudar!

    Já vasculhei diversos fóruns, sites, blogs entre outros à procura de uma luz para me nortear e nada, fiz diversos testes e ainda não consegui resolver esse problema.

    Então vamos lá:

    Tenho um projeto onde criei um MDI que possui um Toolstrip com alguns botões, tipo: salvar, pesquisar, excluir, imprimir, etc...

    Pois bem, quando eu abro um determinado Form dentro desse MDI e clico no botão salvar (por exemplo) chamo uma rotina que identifica qual o form aberto está na "frente", e depois redireciona para uma classe onde eu iria tratar os dados do Form.

    Até ai está funcionando do jeito que eu esperava, entretanto quando tento coletar os dados de um Textbox por exemplo, ou verificar a situação de um Radio Button,  o valor do objeto vem vazio...

    Até acredito que sei o motivo, quando clico no botão que está no MDI ele perde o foco do Form. Como cheguei a essa conclusão?

    Quando coloco um botão dentro do Form para ele fazer essa tarefa de salvar, funciona direitinho.

    Não sei se consegui me explicar corretamente, e se pra vocês compreenderem melhor meu problema necessitarem de mais alguma informação que eu eventualmente tenha esquecido de mencionar aqui... Estou à disposição!

    Como disse anteriormente, estou começando no C# e posso talvez fazer algumas perguntas sem noção.

    Certo do breve auxilio de todos.

    []'s

    Rafael Dutra


    • Editado r.pdutra segunda-feira, 12 de março de 2018 21:35
    segunda-feira, 12 de março de 2018 21:28

Respostas

  • Analisando este código, percebi alguns problemas, vamos lá:

    No método SalvarCadColaborador() na classe UICadColaborador você está instanciando uma nova variável do formulário neste trecho:

    frmCadColaborador ofrmCadColaborador = new frmCadColaborador();

    Sendo assim todos os campos do formulário serão vazios.

    Vamos tentar criar uma lógica, ex:

    Primeiro temos que identificar o formulário, vou sugerir que utilize este código:

    private void tspBtnSalvar_Click(object sender, EventArgs e)
            {
    
     switch (this.ActiveMdiChild.Name)
                {
                    case "frmCadColaborador":
                        frmCadColaborador formulario = (this.ActiveMdiChild as frmCadColaborador);
                        if (formulario != null)
                        {
    // AQUI SERÁ SUA LÓGICA PARA SALVAR OU ATUALIZAR AS INFORMAÇÕES DO FORM
                        }
                        break;
                    default:
                        break;
                }
    
    }

    Vamos lá, na linha que comentei acima, terá que colocar a lógica para salvar as informações do form.Lembrando que não sei como está a arquitetura do seu projeto. Mas no contexto atual você deveria passar para UiCadColaborador a variável acima criada "formulario", neste caso ficaria assim:

         public class UICadColaborador
        {
    
            //SALVA E ALTERA CADASTRO DE COLABORADOR
    
            public static bool SalvarCadColaborador(frmCadColaborador ofrmCadColaborador  )
            {
    
    UCCadColaborador oUCCadColaborador = new UCCadColaborador();
                if (!string.IsNullOrEmpty(ofrmCadColaborador.txtCodColaborador.text))
                {
                    oUCCadColaborador.AtualizaCadColaborador();
    return true;
                }
                oUCCadColaborador.IncluirCadColaborador();
    return true;
             }
        }

    Perceba na assinatura do método que passei o formulário por parâmetro, sendo assim os valores não estarão vazios.

    Bom amigo, espero que tenha, ao menos, esclarecido sua mente um pouco.

    Caso fique com dúvida, vamos tentar novamente!

    Um abraço!


    • Sugerido como Resposta Lucio Rogerio SPBanned quinta-feira, 15 de março de 2018 12:11
    • Marcado como Resposta r.pdutra quinta-feira, 15 de março de 2018 22:36
    quinta-feira, 15 de março de 2018 00:46

Todas as Respostas

  • r.pdutra,

    Como está seu código?


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    terça-feira, 13 de março de 2018 14:39
  • Olá amigo, Bom dia

    Para que possa responder da melhor maneira possível, coloque o código com a lógica que você utiliza para identificar o Form e obter os dados dos componentes.

    Fico no aguardo.

    Um abraço!


    • Editado Edson Loris terça-feira, 13 de março de 2018 14:54
    terça-feira, 13 de março de 2018 14:52
  • Edson,

    Antes de mais nada muito obrigado pelo interesse em me ajudar!

    Como disse anteriormente, tenho um MDI que possui uma Toolstrip com alguns botões.

    Segue o código do btnSalvar localizado no MDI:

      //SALVA OU ALTERA CADASTRO
            private void tspBtnSalvar_Click(object sender, EventArgs e)
            {
                oFormularioOrigem = (Application.OpenForms.Count.ToString());
                foreach (Form frm in Application.OpenForms)
                {
                    oFormularioOrigem = frm.Name;
                }
    
                switch (oFormularioOrigem)
                {
                    case "frmCadColaborador":
                       oFrmCadColaborador.TopMost = true;
                       oUICadColaborador.SalvarCadColaborador();
                        break;
    
                    case "frmFuncoes":
                        oFrmFuncoes.TopMost = true;
                        oUIFuncoes.SalvarFuncoes();
                        break;
                }
                oFormularioOrigem = "";
            }

    Aqui o código da classe UICadColaborador:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace SistemaTeste
    {
         public class UICadColaborador
        {
    
            //SALVA E ALTERA CADASTRO DE COLABORADOR
    
            public static bool SalvarCadColaborador()
            {
    frmCadColaborador ofrmCadColaborador = new frmCadColaborador();
    UCCadColaborador oUCCadColaborador = new UCCadColaborador();
                if (ofrmCadColaborador.txtCodColaborador.text != "")
                {
                    oUCCadColaborador.AtualizaCadColaborador();
    return true;
                }
                oUCCadColaborador.IncluirCadColaborador();
    return true;
             }
        }
    }

    Não sei se é somente isso que você espera, caso tenha que alguma outra dúvida, estou à disposição.

    Tentei criar uma enviar uma imagem(.png), mas ainda não posso...

    Cordialmente,

    Rafael Dutra





    • Editado r.pdutra terça-feira, 13 de março de 2018 23:06
    terça-feira, 13 de março de 2018 21:40
  • Juliano, Boa Tarde.

    Agradeço o interesse pelo meu caso:

    Deixei o código na resposta do Edson Loris.

    Marcando como citação você conseguiria ver?

    Ainda estou aprendendo a usar as ferramentas desse forum.

    Novamente, muito Obrigado!

    []'s

    Rafael Dutra

    terça-feira, 13 de março de 2018 21:42
  • Analisando este código, percebi alguns problemas, vamos lá:

    No método SalvarCadColaborador() na classe UICadColaborador você está instanciando uma nova variável do formulário neste trecho:

    frmCadColaborador ofrmCadColaborador = new frmCadColaborador();

    Sendo assim todos os campos do formulário serão vazios.

    Vamos tentar criar uma lógica, ex:

    Primeiro temos que identificar o formulário, vou sugerir que utilize este código:

    private void tspBtnSalvar_Click(object sender, EventArgs e)
            {
    
     switch (this.ActiveMdiChild.Name)
                {
                    case "frmCadColaborador":
                        frmCadColaborador formulario = (this.ActiveMdiChild as frmCadColaborador);
                        if (formulario != null)
                        {
    // AQUI SERÁ SUA LÓGICA PARA SALVAR OU ATUALIZAR AS INFORMAÇÕES DO FORM
                        }
                        break;
                    default:
                        break;
                }
    
    }

    Vamos lá, na linha que comentei acima, terá que colocar a lógica para salvar as informações do form.Lembrando que não sei como está a arquitetura do seu projeto. Mas no contexto atual você deveria passar para UiCadColaborador a variável acima criada "formulario", neste caso ficaria assim:

         public class UICadColaborador
        {
    
            //SALVA E ALTERA CADASTRO DE COLABORADOR
    
            public static bool SalvarCadColaborador(frmCadColaborador ofrmCadColaborador  )
            {
    
    UCCadColaborador oUCCadColaborador = new UCCadColaborador();
                if (!string.IsNullOrEmpty(ofrmCadColaborador.txtCodColaborador.text))
                {
                    oUCCadColaborador.AtualizaCadColaborador();
    return true;
                }
                oUCCadColaborador.IncluirCadColaborador();
    return true;
             }
        }

    Perceba na assinatura do método que passei o formulário por parâmetro, sendo assim os valores não estarão vazios.

    Bom amigo, espero que tenha, ao menos, esclarecido sua mente um pouco.

    Caso fique com dúvida, vamos tentar novamente!

    Um abraço!


    • Sugerido como Resposta Lucio Rogerio SPBanned quinta-feira, 15 de março de 2018 12:11
    • Marcado como Resposta r.pdutra quinta-feira, 15 de março de 2018 22:36
    quinta-feira, 15 de março de 2018 00:46
  • Edson, Bom dia!

    Vou testar, e se tudo der certo eu aviso você e marco aqui como resposta!

    Muito Obrigado, e até mais!

    []'s

    ps. Pra classificar sua ajuda é só votar?

    quinta-feira, 15 de março de 2018 11:20