none
Como executar um método de um controle em um Windows Form através de uma classe? RRS feed

  • Pergunta

  • Boa noite,

    Explicando a dúvida e expondo a situação:

    1. Tenho o Form1;
    2. Dentro dele tenho vários UserControl;
    3. Para cada botão no form, Tenho um método para chamar o UserControl especifico simples uc.dock = dockstyle.fill + uc.bringtofront();
    4. Em cada botão executo uma metodo que está em uma classe statica de nível de acesso do usuário;
    5. Esse metodo retorna bool;
    6. Com o resultado do bool, faço uma condição que se tru, executo a etapa 3 com o UC de bloqueio

    ------------------ Até aqui tudo beleza -------------------------

    O que acontece que dentro das user control, tenho alguns pontos específicos que preciso tratar o usuário novamente, e eu não quero por uma ucBloqueio dentro de cada outra UserControl, pq o sistema vai ficar cheio de UC para cara tela que preciso bloquear.... 

    Por fim, o que preciso é que no metodo 4 (da lista acima) eu consiga ja fazer o bringtofront da UC de bloqueio no Form1...


    o que eu já tentei:

    // o Form
    public partial class Form1 : Form
    {
    ...
    public void TelaBloqueio()
    ucBloqueio.BringToFront();
    ucBloqueio.Dock = DockStyle.Fill;
    }
    
    // A Classe de validação
    Public class Valida {
    public static bool ValidaUsuario(int nivel)
    {
    switch(nivel)
    {
    case 1:
    Form form = Application.OpenForms["Form1"];
    form.Control.Find("ucBloqueio",true)[0].BringToFront();
    return true;
    case 2:
    return false;
    default:
    return false;
    }
    }
    }
    
    
    // O Metodo dentro de um UserControl que valida o usuario, se cair em 1 bloqueia a tela com o ucBloqueio
    Public partial class uc1 : UserControl {
    private void TestaUsuario(int nivel)
    {
    Valida.ValidaUsuario(nivel)
    }
    }


    Tentei tbm fazendo o método dentro da Form1 sendo statico, mas não tive sucesso pois o ucBloqueio já esta inserido dentro do form, e não é instanciado.... 

    Se alguém tiver alguma sugestão, muito obrigado.

    quarta-feira, 3 de junho de 2020 04:41

Respostas

  • Opá, depois de 5 horas de sono tive a ideia de tentar fazer a chamada a partir da UserControl, já que ela é children da Form.. 

    ((Form1)Parent).TelaBloqueio();

    Deu certo, mas como falei, ainda preciso do retorno da condição da classe de validação e executar essa linha no UC.

    se alguém tiver a sugestão de como tratar isso direto dentro da classe... 

    quarta-feira, 3 de junho de 2020 13:46