我有两种形式,一种是月份,另一种是TextBox。 问题是我在选择TextBox后没有显示日期。 为了确保我编写了工作代码,我只在一个表单上做了同样的事情,并且它工作正常。 将MonthCalendar设置为public,与需要显示日期的TextBox相同
以下是Button和monthcalendar的代码:
which zip
还尝试了DateSelected,它给了我相同的结果,没有。 谢谢upfornt。
答案 0 :(得分:0)
将值传递给上一个表单的一种方法是使用表单结束事件处理程序和get / set方法来提取值。例如:
form1 = new Form1();
form1.FormClosing += new FormClosingEventHandler(GetDateFromForm);
private void GetDateFromForm(object sender, FormClosingEventArgs e)
{
textbox1.Text = from1.GetDate;
}
然后在您的月份日历表单中,使用
string date;
public string GetDate {get {return date;} set {date = value;}}
Public Form2()
{
date = monthCalendar1.SelectionStart.ToShortDateString();
}
关闭日历后,将转移所选的值。
另一种方法是在第二种形式的构造函数中发送对要应用更改的表单的引用。
在您创建弹出窗体时,使用主窗体(带按钮的窗体),使用语法Form2 calendarform = new Form2(this)
并编写一个公共方法,以满足您的需要
public void SetText(string text)
{
textbox.Text = text;
}
在您的第二种形式(带月历的那种)中,您将能够参考之前的方法。例如:
public partial class Form2 : Form
{
Form1 _owner;
public Form2(Form1 form)
{
InitializeComponent();
_owner = form;
}
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
_owner.SetText(monthCalendar1.SelectionEnd.ToShortDateString());
}
因为我们在第二种形式中引用了前一个表单,所以您可以调用将在form1上运行的所有公共方法。因此,在这种情况下,您可以从form2调用SetText()
方法,这将把文本框更改为我们想要的任何内容 - 在您的情况下是月份日历的选定值。
使用DateChanged
方法意味着它会在您更改日期时实时调用所述方法。