我实际上有两个问题。当用户单击箭头以更改月份时,将自动选择给定月份的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();
}
}
答案 0 :(得分:2)
不,不可能阻止此行为。当用户导航到新月时,这与更改日期相同。另一种行为没有多大意义:当选择新月时,必须选择该月的一些天,并且该月的第一天与任何一个一样好。事实上,DateChanged
event的描述甚至解释了它:
当日期范围因用户选择或下一个/上个月导航而发生变化时发生。
您是否考虑过处理DateSelected
event?我怀疑这会更接近你想做的事情。它的描述说:
当用户选择日期或日期范围时发生。
和魔术一样,当我处理DateSelected
事件时,关闭表单就可以了:
public class DatePickerForm : Form
{
public DatePickerForm()
{
InitializeComponent();
}
private void calendar_DateSelected(object sender, DateRangeEventArgs e)
{
this.Close();
}
}