none
desabilitar propriedade de um form por um outro form

    Question

  • ola pessoa estou programando em camadas utilizando o visual studio 2008 para desktop eu estou cadastrando uma ordem de serviço e depois q cadastro esta ordem de serviço me abre um outro form de inserir materiais...se o usuario nao cadastrar nenhum item e quiser sair ele clica no botao sair e ele cancela a o.s ..neste botao sair coloquei um delete...caso confirme o cadastro esta o.s fica aberta ate ser encerrada...tenho uma busca q qdo ela encontra uma o.s aberta ela traz todo o formulario de o.s carregado com seus dados e posso clicar no botao inserir material novamente...como esta o.s ja esta aberta caso queira desistir de inserir mais materiais nao posso clicar no sair pq ela vai encerrar esta o.s...tem como eu desativar este botao para por um outro sair normal?..miinha duvida eh tem como desativar este botao sair qdo entro atraves da busca e ativar este botao sair qdo eu entrar pelo cadastro de o.s?  vou colocar como estou trazendo a o.s carregada pela busca

     

    OrdemServicoMOV os;

     

    public frmOS(Form pai, OrdemServicoMOV e)

     

           this.MdiParent = pai.MdiParent;

     

     

            this.os = e;

     

     

     

     

    }

     

    public frmOS(Form pai, bool e)

     

         this.MdiParent = pai.MdiParent;

     

    }

     

    private void frmOS_Load(object sender, EventArgs e)

     

    {

        if

     

     

    (this.os != null)

     

       Preenche();//metodo q chama os campos

    }

    private void Preenche()
      {
       CdOs.Text = os.CodOs.ToString();
       DataOs.Text = os.DataCriacao.ToShortDateString();
       CdFuncionario.Text = os.Funcionario.CodFuncionario.ToString();
       DeFuncionario.Text = os.Funcionario.DescFuncionario;
       DeFuncao.Text = os.Funcionario.Funcao.DescFuncao;
       txtSetor.Text = os.Funcionario.Setor.DescSetor;
       txtEquipe.Text = os.Funcionario.Equipe.Descricao;
       DeOs.Text = os.DescOs;
       cbEquipamentos.Text = os.Equipamento.DescEquipamento;
       CdEquipamento.Text = os.Equipamento.CodEquipamento.ToString();
       DeSetor.Text = os.Equipamento.Setor.DescSetor;
       DeArea.Text = os.Equipamento.Area.DescArea;
       cbGerencial.Text = os.Conta.DescGerencial;
       cbAtividade.Text = os.Atividade.DescAtividade;
       btInserir.Visible = true;
       btEncerrar.Visible = true;
       btConfirmar.Enabled = false;
       btNovo.Enabled = false;
       CdFuncionario.ReadOnly = true;
       DeOs.ReadOnly = true;
       cbAtividade.Enabled = false;
       cbEquipamentos.Enabled = false;
       cbGerencial.Enabled = false;
       gB2.Visible = true;
       groupBox6.Visible = false;
       this.os = null;
      }
    //aqi neste metodo recebo todos os campos para preencher os //campos da o.s e deste form preenchido eu abro o outro no //qual qro desativar o botao sair e colocar outro só para fechar...
    
    //aqi chamo o outro form
    
     TrabalhoUsina.frmOS.codigo = CdOs.Text;//Guarda o codigo da O.S passar p form materiaisInseridos
    
     frmMateriaisInseridos mat = new frmMateriaisInseridos();
     mat.Owner = this;//isto fecha o form da o.s e o de materiais inseridos qdo sair sem cadastrar nada
     mat.Show();//aqi abro o form de inserir materiais

    {

          InitializeComponent();

     

    {

            InitializeComponent();

     

     

     

    Monday, November 08, 2010 6:08 PM

All replies

  • C,

     

        Não seria mais simples se você fizesse tudo no 2o. form? Bastaria passar os parâmetros pelo construtor e criar a OS e os detalhes somente quando o usuário REALMENTE salvar. Assim você não precisa do DELETE.

        De qualquer forma, para isso você vai precisar verificar se a OS existe ou não ou passar um parâmetro pro formulário de detalhe (pelo construtor mesmo) informando se você está INCLUINDO ou ALTERANDO.

        Tipo:

         private bool _incluindo;

         public frmOS( Form pai, bool e, bool incluindo)

         {

               // Outras coisas

               _ incluindo = incluindo

         }

        Adicione o evento Form_Closing e verifique a variável.

        Assim vai funcionar, mas seria melhor optar por mudar (até por questão de não ficar "sugeira" no banco). Se o usuário DESLIGAR ou REINICIAR o micro após incluir uma OS? Ou se a máquina do usuário travar?

    Pense bem,

    Ricardo

    Monday, November 08, 2010 9:59 PM
  • Entao, para voce ter este acesso vc deve construir o seu form filho mais ou menos assim.

    Cria um metodo no Form1 tipo "AtualizaGridForm1()"

    Ai quando vc for instanciar o Form2 vc passa o seu form1 como paramentro.... tipo

    Form2 segundo = new Form2(this);

    segundo.show();

     

    no construtor do seu Form2 vc faz tipo assim:

    Form1 vvGLobal = null; //declara uma variavel global no seu form2 do tipo form1

    public form2(Form1 primeiro){

    vvGlobal = Primeiro; //aqui vc faz a sua variavel global apontar para o mesmo lugar da memo q esta o form1

    }

    No evento ONCLOSE ou CLOSED do seu Form2 vc chama o metodo que vc fez no form1 tipo assim:

    if(itens.count < 1) vvGLobal.close();

    Sakow? abraco

    Tuesday, November 09, 2010 3:04 PM