none
Trabalhar com Janelas RRS feed

  • Pergunta

  • Olá pessoal!
    A situação é a seguinte, tenho um programa com uma janela principal, daí tenho alguns menus... Que, chama outras janelas... Então quando eu clico em, por exemplo: Documento->Novo Documento, abre uma janela pedindo para o usuário informar os dados sobre o novo documento e beleza...

    Só que quando o usuário clica no "Gravar" eu preciso que a tela principal altere-se para que o usuário consiga trabalhar de uma determinada maneira, toda esta parte está ok... funcionando...

    Meu problema está com o seguinte, quando o usuário clica no gravar... Eu não estou conseguindo "renderizar" a instância existente da janela principal... Somente criando uma nova janela dá para alterar... Daí fica ruim, pq em determinado ponto do programa, o cidadão vai ter umas 20 janelas principais abertas... E não é esta a intenção...

    Grato,

    Jefferson.
    segunda-feira, 23 de agosto de 2010 16:48

Respostas

  • Olá Jefferson,
    Você precisa atualizar a janela principal através de uma outra janela, certo?

    Você pode fazer isso através de um EventHandler. Ficaria mais ou menos assim:

    "tela 2" a que é chamada pela tela principal, vc cria um event handler

    public event EventHandler AtualizaTela;
    
    Na tela principal, na chamada da tela 2, vc cria uma instancia da tela 2 e indica o código que será executado no evento

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        Window2 window2 = new Window2();
        window2.AtualizaTela += new EventHandler(window2_AtualizaTela);
    
        window2.Show();
    }
    
    // método que será executado no evento
    void window2_AtualizaTela(object sender, EventArgs e)
    {
        this.lbl.Content = "Tela Atualizada!";
    }
    e finalmente na tela 2, após a execução de todas as tarefas, para atualizar a tela principal


    private void btn_Click(object sender, RoutedEventArgs e)
    {
       // tarefas
       this.AtualizaTela(this, e);
    }

    Att.
    Anderson

    • Marcado como Resposta Jefferson Balivo segunda-feira, 23 de agosto de 2010 17:59
    segunda-feira, 23 de agosto de 2010 17:15

Todas as Respostas

  • Olá Jefferson,
    Você precisa atualizar a janela principal através de uma outra janela, certo?

    Você pode fazer isso através de um EventHandler. Ficaria mais ou menos assim:

    "tela 2" a que é chamada pela tela principal, vc cria um event handler

    public event EventHandler AtualizaTela;
    
    Na tela principal, na chamada da tela 2, vc cria uma instancia da tela 2 e indica o código que será executado no evento

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        Window2 window2 = new Window2();
        window2.AtualizaTela += new EventHandler(window2_AtualizaTela);
    
        window2.Show();
    }
    
    // método que será executado no evento
    void window2_AtualizaTela(object sender, EventArgs e)
    {
        this.lbl.Content = "Tela Atualizada!";
    }
    e finalmente na tela 2, após a execução de todas as tarefas, para atualizar a tela principal


    private void btn_Click(object sender, RoutedEventArgs e)
    {
       // tarefas
       this.AtualizaTela(this, e);
    }

    Att.
    Anderson

    • Marcado como Resposta Jefferson Balivo segunda-feira, 23 de agosto de 2010 17:59
    segunda-feira, 23 de agosto de 2010 17:15
  • Cara... Funcionar... Até funcionou...

    Mas da mesma forma que tem funcionado... Ele chama o evento... Coloquei um MessageBox lá pra ver se ele vai executar, ele executa... Mas a tela principal continua da mesma forma...

    Na minha tela principal eu estou usando painéis... Com o AvalonDocks... Toh vendo se precisaria dar um "refresh" no Avalon, mas ele num tem nada desse tipo...

    Mas a sua maneira ficou bem mais organizada...

    Obrigado!

    segunda-feira, 23 de agosto de 2010 17:39
  • Entendi, vc já tentou usar dependency properties?
    Neste caso, quando vc alterasse os valores das propriedades, que poderia ser por exemplo no método do eventhandler, ele ja atualizaria consequentemente os elementos das tela, entendeu?

    Att.
    Anderson

    segunda-feira, 23 de agosto de 2010 17:46
  • Como que seria usando as DPs...
    segunda-feira, 23 de agosto de 2010 17:47
  • CARACA!!!!

    Deu certo brow... Tudo na boa... Sabe o que era... Fui lah mapear o AvalonDocks... E um "Fiadamãe" botou um método no Loaded do Docking Manager, que fazia o q... Toda vez que a tela era carregada, ele trazia o XML de Layout Default do Avalon... Que tava zerado... Daí a hora que rodava o refresh da tela... o que acontecia... O Evento Loaded do DockingManager era acionado DEPOIS da minha atualização de tela... Resultado... O Avalon voltava zerado... rs...

    Mas cara... a sua forma com o Evento, ficou muito melhor no meu código... Me polpou uma classe para manipular as janelas... Vlw Mesmo!!!

    segunda-feira, 23 de agosto de 2010 17:59