How to block a form after a certain downtime?

2

Example: After 1 minute of inactivity the form 'system' is disabled and calls a login form, after completing the login it returns to the form 'system' and activates it again ..

Or it can be at the push of a button it locks the form 'system' and calls the 'login', when logging in it activates the form again ..

I tried disabling the this.Enabled of the current form after clicking the lock button and after that creating a login instance and opening it, in logic the command to unlock the form 'system' would be when clicking the login button , after the name and password checks, but I can not access the .Enabled property of the form 'system' by 'login' .. I've tried to create a static variable to control this, but it does not work because it does not have a Update function which updates every second (as in Unity) and I do not know how to create this function in Visual Studio

    
asked by anonymous 28.06.2015 / 20:42

2 answers

1

If you want to reset your iddle time (that is, your Timer ) in the mouse movement or button press, consider:

Form1.cs

    public Point mouseLocation;
    public static LoginBloq nvLoginBloq = new LoginBloq(); 

    public Form1()
    {
        InitializeComponent();

        this.KeyPress += _keyPress;
        this.MouseMove += _mouseMove;
    }

    private void _mouseMove(object sender, MouseEventArgs e)
    {
        mouseLocation = e.Location;
        this.ResetaIddleTimer();
    }

    private  void _keyPress(object sender, KeyPressEventArgs e)
    {
        this.ResetaIddleTimer();
    }

    void ResetaIddleTimer()
    {
        // código para resetar o iddle time
    }

Note that LoginBloq is created only once in Form1.cs and is static . Depending on the flow of your code, you can control the visibility of nvLoginBloq of any other form:

OutroForm.cs

public partial class OutroForm : Form
{
    public OutroForm()
    {
        InitializeComponent();

        Form1.nvLoginBloq.Visible = true;

    }
}

That is, you control the iddle time and at the same time access LoginBloq in a class only ( Form1 ).

    
29.06.2015 / 00:57
0

Well I got it, there is only one drawback, it does not record mouse movement as activity, just click, change fields, etc. The code is great:

Form 'system'

public Timer relogio; // cria timer
public int contador = -1; // contador (conta o tempo em segundos)
public bool atv = false; // booleano para controle do formulario de login

// abaixo do InitializeComponent();
relogio = new Timer(); // cria uma instancia de time
relogio.Interval = 1000; //depermina o tempo (assim fica em segundos)
relogio.Enabled = true; // ativa o time
this.relogio.Tick += new System.EventHandler(this.relogio_Tick); // cria um metodo de controle

private void Interface_Click(object sender, EventArgs e)
{//redefine contador quando há clique no formulario (deve-se criar isso para cada campo de formulario, desde menu a campos de texto)
    contador = -1;
}

private void relogio_Tick(object sender, EventArgs e) //controlador de time
{
    if (contador == 10) // quando o contador chegar a 10 (10 segundos)
    {
        if (atv == false)//se a tela de login nao estiver em execução
        {
            this.Enabled = false;//desabilita o formulario 'sistema'
            LoginBloq nvLoginBloq = new LoginBloq(); //cria uma instancia do login
            nvLoginBloq.Show(); // abre a instancia
        }
        else{}//se atv = true (se formulario 'login' estiver ativo não faz nada)
    }

    else if(contador > 10) //se contador for mais que 10 (10 segundos)
    {
        this.relogio.Enabled = false;//desabilita relogio
    }
    contador++;// a cada vez ele que executa o metodo (sempre) ele aumenta contador
}

Login Form

//após o InitializeComponent();
Login.nvInterface.atv = true; // fala que esta ativo (para nao ficar criando novos form 'login')

// após ele permitir o login (ao clicar no botao de login)
this.Enabled = false; // desabilita a si mesmo
Login.nvInterface.atv = false; //
Login.nvInterface.contador = -1; //rededine o contador (em segundos)
Login.nvInterface.relogio.Enabled = true; //ativa o time novamente
Login.nvInterface.Show(); //mostra novamente o formulario 'sistema'
Login.nvInterface.Enabled = true; // ativa (desbloqueia) formulario 'sistema'
this.Visible = false; // torna-se invisivel
//as linhas Visible e Enabled, são necessárias nessa ordem, se não ele buga

Login.nvInterface - is an instance created on another Login form, to display the 'system' form

If you have any form before the 'system' (as is the case)

Previous Form

// antes de tudo
public static Interface nvInterface = new Interface(); //criar uma instancia publica do formulario 'sistema'

// depois de InitializeComponent();
nvInterface.relogio.Enabled = false; //desativa relogio do formulario 'sistema'

// no metodo do botão que vai para o formulario 'sistema' ou depois do InitializeComponent(); do formulario 'sistema'
nvInterface.relogio.Enabled = true; //ativa relogio do formulario 'sistema'

// assim ele 'trava' o time da instancia ate que ela seja exibida
    
28.06.2015 / 23:22