выйти из основной формы и показать форму входа - PullRequest
2 голосов
/ 26 сентября 2011

Я знаю, что эта проблема может показаться глупой, но печальный случай, я искал в Интернете, чтобы найти решение, но все еще не могу найти правильное решение. Моя проблема сейчас = кнопка выхода из системы, чтобы выйти из главной формы, а затем снова открыть форму входа. Приведенный ниже код НЕ будет отображать форму входа после того, как я нажму кнопку выхода, он сразу же закроет все приложение.

void logoutbtn_Click(object sender, EventArgs e)
    {
        CloseSockets(); 
        this.Close();
        serverlogin login = new serverlogin();
        login.Show();   
    }

Итак, я пытаюсь заменить this.Hide() вместо this.Close();. Но что-то даже глупое случилось. Да, страница входа отображается после того, как я нажимаю кнопку выхода из системы, но когда я нажимаю кнопку «Отмена» в форме входа в систему, она не выходит из всего приложения, где предполагается выход из всего приложения. я думаю, потому что основная форма просто скрывается и еще не близко ??? Кроме того, когда я пытаюсь войти снова, кнопка входа также НЕ работает и не может войти на главную страницу.

Я прошу прощения за мои объяснения и, пожалуйста, скажите мне, если это очень неясно. Пожалуйста, помогите мне. Большое вам спасибо.

Ответы [ 4 ]

0 голосов
/ 29 ноября 2018

Я пересмотрел первый ответ и обнаружил, что что-то не так. В коде он закрывает форму после создания нового потока. Я проверял это, но он всегда закрывал мою форму. Поэтому я переключил this.Close(); с t.Start();, и это сработало. Ниже у вас есть объяснение кода.

Вы создаете новую тему, затем закрываете форму, в которой находитесь (например, для меню), и, наконец, запускаете новую тему. Вы создаете новый метод, где вы запускаете новую форму. Я прокомментировал это построчно.

private void btnLogout_Click(object sender, EventArgs e)
{
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(OpenLoginForm)); //you create a new thread
    this.Close(); //you close your current form (for example a menu)
    t.Start();  //you start the thread
}

public static void OpenLoginForm()
{
    Application.Run(new LoginForm()); //run your new form
}
0 голосов
/ 26 сентября 2011

Возможно, вы просто захотите запустить новый экземпляр вашего приложения, а затем выйти из старого, когда выбрано «Выйти».Это очищает все ресурсы, которые все еще используются, и значительно затрудняет утечку данных из одного пользовательского сеанса в другой.

Недостатком, конечно, является то, что он будет медленнее, но есть ngen.exeуменьшить стоимость перезапуска приложения.

0 голосов
/ 12 января 2017
private void btnLogout_Click(object sender, EventArgs e)
    {
        System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(OpenLoginForm));
        t.Start();
        this.Close();   
    }
    public static void OpenLoginForm()
    {
        Application.Run(new LoginForm());
    }
0 голосов
/ 26 сентября 2011

Вам необходимо определить 2 события в вашей форме, которые будут запускаться при нажатии кнопки и обрабатывать его в основной форме:

MainForm.cs

void logoutbtn_Click(object sender, EventArgs e)
{
    CloseSockets();
    this.Hide();
    serverlogin login = new serverlogin();

    login.Login += new EventHandler(serverlogin_Login);
    login.Cancel += new EventHandler(serverlogin_Cancel);

    login.Show();
}

private void serverlogin_Login(object sender, EventArgs args)
{
    this.Show();
    // do login
}

private void serverlogin_Cancel(object sender, EventArgs args)
{
    Application.Exit();
    // do exit
}

LoginForm.cs

public event EventHandler Login;
public event EventHandler Cancel;

private void OnLogin()
{
    if (Login != null)
        Login(this, EventArgs.Empty);
}

private void OnCancel()
{
    if (Login != null)
        Login(this, EventArgs.Empty);
}

private void btnLogin_Click(object sender, EventArgs e)
{
    this.OnLogin();
}

private void btnCancel_Click(object sender, EventArgs e)
{
    this.OnCancel();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...