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

时间:2011-04-20 10:14:51

标签: c# winforms monthcalendar

我实际上有两个问题。当用户单击箭头以更改月份时,将自动选择给定月份的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();
        }
    }

1 个答案:

答案 0 :(得分:2)

  1. 不,不可能阻止此行为。当用户导航到新月时,这与更改日期相同。另一种行为没有多大意义:当选择新月时,必须选择该月的一些天,并且该月的第一天与任何一个一样好。事实上,DateChanged event的描述甚至解释了它:

      

    当日期范围因用户选择或下一个/上个月导航而发生变化时发生。

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

      

    当用户选择日期或日期范围时发生。

  2. 和魔术一样,当我处理DateSelected事件时,关闭表单就可以了:

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