none
Переопределённый OnClose(), а выйти стандартным. RRS feed

  • Вопрос

  • Здравствуйте. Я снова вернулся. И так, проблема такова. Для нужд некоего проекта пришлось переопределить метод OnClose(), чтобы он не закрывал окошко, а лишь убирал его, но в то же время необходимо, чтобы по клику на всплывающем меню он выходил. Реализовано так:

    // тут пространства имён, глобальные переменные и пр...
    public partial class MainWindow : Window
        {
            private bool CanClosed { get; set; }
            
            // переопределённый метод
            protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
            {
                if (!CanClosed)
                {
                    e.Cancel = true;
                    Hide();
                }
                else
                {
                    base.OnClosing(e);
                }
            }
    
            // полноценный выход из приложения
            private void Exit_Click(object sender, RoutedEventArgs e)
            {
                CanClosed = true;
                TrayIcon.Dispose();    // надо, ибо глючит без этого
                Close();
            }

    Вот вопрос: всё ли я правильно сделал? На двух тестовых виртуалках под W7 и WXP рабоатет как надо, но народ жалуется, что иконка пропадает, а сама программка по-прежнему висит в процессах. 

    DreamSpark Premium User


Ответы

  • Попробуйте просто подписаться на событие Closing:

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        if (!CanClosed)
        {
            e.Cancel = true;
            Hide();
        }
    }

    • Помечено в качестве ответа asdfxcbneftyherwe 10 мая 2012 г. 7:53
    Отвечающий

Все ответы