none
как отменить закрытие окна? RRS feed

  • Вопрос

  • Доброго всем времени?

    Вопрос в следующем:

    1. Как отменить закрытие окна при нажатии на крестик?

    2. Как передать какое - то числовое значение окну1 при закрытии окна2?

    Вот такие вопросы возникли. помогите пожалуйста. пишу в с#/

    25 июля 2014 г. 18:02

Ответы

  • В момент открытия окна2 методу Show (или ShowDialog) можно передать параметр - ссылку на окно-владельца (в Вашем случае - окно1). Из класса окна2 владелец будет доступен через свойство Owner.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    25 июля 2014 г. 19:10
  • Не столь важно, на каком языке Вы пишите. Важнее - какую технологию используете (WinForms, WPF)? В WinForms подписываетесь на событие FormClosing, в WPF - событие окна Closing. И там и там в параметрах события свойство Cancel устанавливаем в false. Процедура закрытия окна (формы) будет прервана.

    По поводу второго вопроса: передавайте что угодно в указанном обработчике, если владеете объектом окна1.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Edik2012 16 августа 2014 г. 8:00
    25 июля 2014 г. 18:52
  • Странно, что эта мысль сразу Вам не пришла :) Отмена закрытия должна быть интеллектуальной. А именно, в параметре события FormClosing Вы также получаете причину данного события (в свойстве CloseReason). Анализируйте его и отменяйте закрытие, только когда требуется. В частности, закрытие окна крестом генерирует причину UserClosing.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    26 июля 2014 г. 12:37

Все ответы

  • Не столь важно, на каком языке Вы пишите. Важнее - какую технологию используете (WinForms, WPF)? В WinForms подписываетесь на событие FormClosing, в WPF - событие окна Closing. И там и там в параметрах события свойство Cancel устанавливаем в false. Процедура закрытия окна (формы) будет прервана.

    По поводу второго вопроса: передавайте что угодно в указанном обработчике, если владеете объектом окна1.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Edik2012 16 августа 2014 г. 8:00
    25 июля 2014 г. 18:52
  • Испльзую winform. Не нашел там параметр cancel. Буду пробывать. Не совсем понял ответ на второй вопрос. Сначала я вызываю из окна 1 окно2 а при закрытии окна 2 Мне нужно передать окну1 число.
    • Изменено Edik2012 25 июля 2014 г. 19:01
    25 июля 2014 г. 19:00
  • В момент открытия окна2 методу Show (или ShowDialog) можно передать параметр - ссылку на окно-владельца (в Вашем случае - окно1). Из класса окна2 владелец будет доступен через свойство Owner.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    25 июля 2014 г. 19:10
  • Теперь понял. Буду пробывать.
    25 июля 2014 г. 19:11
  • Отменить - то отменил, а как теперь закрыть? 

    this.close() отправляет на событие Form2_FormClosing проходит его и ни какой реакции.

    26 июля 2014 г. 12:29
  • Странно, что эта мысль сразу Вам не пришла :) Отмена закрытия должна быть интеллектуальной. А именно, в параметре события FormClosing Вы также получаете причину данного события (в свойстве CloseReason). Анализируйте его и отменяйте закрытие, только когда требуется. В частности, закрытие окна крестом генерирует причину UserClosing.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    26 июля 2014 г. 12:37
  • Нет, я сразу понял это и сделал условие

            private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (!ok)
                {
                    e.Cancel = true;
                    MessageBox.Show("Нельзя просто закрыть окно. \n Надо решить задание. \n Если правильно решишь, то больше будешь играть.");
                }
                else e.Cancel = false;
            }

    ок я в процессе ставлю если задание выполнено.

    • Предложено в качестве ответа LXGDARKEditor 30 июля 2014 г. 7:57
    • Отменено предложение в качестве ответа LXGDARKEditor 30 июля 2014 г. 7:57
    26 июля 2014 г. 13:02