如何在MonthCalendar的date_changed事件中关闭表单

本文关键字:事件 表单 changed MonthCalendar date | 更新日期: 2023-09-27 17:50:34

我实际上有两个问题。当用户单击箭头更改月份时,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'

如何关闭表单?

编辑:

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();
        }
    }

如何在MonthCalendar的date_changed事件中关闭表单

  1. 不,阻止这种行为是不可能的。当用户导航到一个新的月份时,这与更改日期是一样的。另一种行为没有多大意义:当选择一个新的月份时,必须选择该月中的某个天,而该月的第一天也是一个很好的候选。事实上,DateChanged事件的描述甚至解释了它:

    当由于用户选择或通过下一个月/前一个月导航而更改日期范围时发生。

    您是否考虑过处理 DateSelected 事件?我怀疑这会更接近你想要的。它的描述说它:

    当用户选择一个日期或一组日期时发生。

  2. 就像魔法一样,当我处理DateSelected事件时,关闭表单工作得很好:

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