Как закрыть форму в событии date_changed в MonthCalendar? - PullRequest
0 голосов
/ 20 апреля 2011

У меня на самом деле два вопроса. Когда пользователь нажимает стрелки, чтобы изменить месяцы, автоматически выбирается число 1. данного месяца. Можно ли предотвратить такое поведение, поэтому date_changed сначала срабатывает, когда пользователь нажимает на фактическую дату?

public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
        {
            this.Close();
        }
    }

Я поместил свой MonthCalendar в отдельной форме. При нажатии на кнопку эта форма открывается, и пользователь может выбрать дату. В событии date_changed я хочу закрыть форму, поэтому я сделал this.Close (), но это приводит к сбою приложения, и я получаю исключение ObjectDisposedException:

Невозможно получить доступ к удаленному объекту. Название объекта: 'MonthCalendar'

Как мне закрыть форму?

EDIT:

public partial class Form1 : Form
    {

        Form2 frm2;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            frm2 = new Form2();
            frm2.theForm = this;
            frm2.Show();

        }


        public void closeAform()
        {
            frm2.Close();
        }

    }

public partial class Form2 : Form
    {

        public Form1 theForm { get; set; }

        public Form2()
        {
            InitializeComponent();
        }

        private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
        {
            theForm.closeAform();
        }
    }

1 Ответ

2 голосов
/ 20 апреля 2011
  1. Нет, это невозможно предотвратить.Когда пользователь переходит на новый месяц, это то же самое, что и изменение даты.Альтернативное поведение не имеет особого смысла: когда выбран новый месяц, какой-то день в этом месяце должен быть выбран, и первый день месяца является таким же хорошим кандидатом, как и любой другой.На самом деле, описание события DateChanged даже объясняет, что оно:

    Происходит, когда диапазон дат изменяется из-за выбора пользователя или с помощью навигации следующего / предыдущего месяца.

    Рассматривали ли вы вместо этого обработку события DateSelected ?Я подозреваю, что это приблизится к тому, что вы хотите.В его описании говорится, что оно:

    Происходит, когда пользователь выбирает дату или диапазон дат.

  2. И, как магия, когда я обращаюсьвместо этого DateSelected, закрытие формы работает нормально:

    public class DatePickerForm : Form
    {
        public DatePickerForm()
        {
            InitializeComponent();
        }
    
        private void calendar_DateSelected(object sender, DateRangeEventArgs e)
        {
            this.Close();
        }
    }
    
...