Zamknięcie formatki krzyżykiem

0

Witam,

Mam następujący problem:

private void Button1_Click(object sender, EventArgs e)
{
    this.Close();
}

private void Button2_Click(object sender, EventArgs e)
{
    this.Close();
}

private void FormStart_FormClosing(object sender, FormClosingEventArgs e)
{
    if (sender is Button)                     // to oczywiście nie działa bo obiektem wywołujacym jest formatka
        this.Close();
    else
        Application.Exit();
}

Jak widać powyżej, chciałbym zamknąć okno jeśli ktoś kliknął na button, albo zamknąć całą aplikację, jeśli ktoś kliknął na krzyżyk formatki. Wiecie może jak rozwiązać ten problem?

Bardzo dzięuję za wszelkie odpowiedzi.
Pozdrawiam, Hiob.

0

Jeżeli to forma główna, to aplikacja zamknie się pod wpływem zamknięcia głównej formy. Jeżeli chcesz tylko i wyłącznie zamykać poprzez Button, a nie krzyżyk, wystarczy sprawdzić czy sender jest właśnie Buttonem i zmienić właściwość Cancel FormClosingEventArgs na true.

0

... a jak sprawdzić, czy "Close()" wywołał "Button" czy krzyżyk?

1

Tak tego nie zrobisz. Utwórz dodatkową zmienną, którą ustawisz w przypadku zamknięcia z Buttona, a potem w evencie closing sprawdź czy button zamknął. Event closing jest wywoływany i tak przez formatkę, więc sender będzie formatką.

0

Zrobiłem to tak:

private Boolean CloseApplication = true;

private void Button1_Click(object sender, EventArgs e)
{
    this.CloseApplication = false;
    this.Close();
}
 
private void Button2_Click(object sender, EventArgs e)
{
    this.CloseApplication = false;
    this.Close();
}
 
private void FormStart_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.CloseApplication)
        Application.Exit();
    else
        this.Close();
}

... ale wyskakuje mi błąd:

Cross-thread operation not valid: Control 'ButtonRS485' accessed from a thread other than the thread it was created on.

Edit.

Dobra widzę błąd :)

private Boolean CloseApplication = true;

private void Button1_Click(object sender, EventArgs e)
{
    this.CloseApplication = false;
    this.Close();
}
 
private void Button2_Click(object sender, EventArgs e)
{
    this.CloseApplication = false;
    this.Close();
}
 
private void FormStart_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.CloseApplication)
        Application.Exit();
}

Dziękuję za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1