我正在编写一个Winform应用程序,在某些时候我希望提示用户从日历中选择一个日期。因此,在浏览谷歌之后,我想我可以使用MonthCalendar控件来实现这一目标。现在我要说的是:
MonthCalendar monthCalendar = new MonthCalendar();
monthCalendar.Show();问题是,当到达此代码时,不会发生任何事情。我做错什么了?
谢谢
发布于 2017-01-23 15:34:36
这是非常基本的windows窗体处理。
MonthCalender是一个控件。你不能只显示控制。控件只能显示在ContainerControl上。ContainerControl是一个控件,它可以保存其他控件并注意显示它们。
最著名的ContainerControls之一是表单。在visual中,我们通常使用设计器创建窗体并在其上放置控件。
取决于您是只想在一个特定的表单上使用特殊的MonthCalender,还是要在几个表单上重用它,您必须决定是将您的MonthCalender放在表单上还是在用户控件上。
用户控件的好处是,您可以使用visual中的设计器在任何窗体上拖放您的特殊MonthCalender。
但是最后,你必须把你的MonthCalender放在一个表格上。一旦显示了表单,就会显示MonthCalender。
public class MySpecialForm : Form
{
public MySpecialForm()
{
InitializeComponent();
}
}上面的内容是由在向项目中添加表单后创建的:在项目的解决方案资源管理器中右键单击并选择added窗体
在“设计器”中选择“工具箱”(菜单视图工具箱),在“Common Controls”下的“工具箱”上选择“MonthCalendar”,然后单击要显示月历的窗体。
这是基本的形式设计。添加MonthCalendar后,代码将在InitializeComponent中创建
private System.Windows.Forms.MonthCalendar monthCalendar1;
private void InitializeComponent()
{
this.monthCalendar1 = new System.Windows.Forms.MonthCalendar();
//
// monthCalendar1
//
this.monthCalendar1.Location = new System.Drawing.Point(266, 83);
this.monthCalendar1.Name = "monthCalendar1";
this.monthCalendar1.TabIndex = 3;您不会经常编辑这个文件,使用设计器要容易得多。
一旦您有了表单并想要显示它,例如在您的主窗体上单击一个按钮之后:
private void OnMainFormButtonClicked(object sender, ...)
{
using (var mySpecialForm = new MySpecialForm()
{
// if desired set some properties of the form before showing
mySpecialForm. ...
// show the form and wait for the result:
var dlgResult = mySpecialForm.ShowDialog(this);
// process the result
if (dlgResult == ...)
{
ProcessResult(form.GetFormResult);
}
}发布于 2017-01-22 23:55:59
要做到这一点并不难。下面的代码使用了一个小的Form,并在下面的设计器中创建了一个MonthCalender和一个Button。

此表单由另一个“父”窗体调用。当用户单击“已完成”按钮时,父窗体可以使用位于GetDT中的公共方法FormCalender获取此日期。此代码只获取第一个选定日期,但是用户可以选择多个日期。此外,如果需要,您也可以进行任何错误检查。希望这能有所帮助。
表格1:
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
FormCalendar fc = new FormCalendar();
fc.ShowDialog();
MessageBox.Show("User Selected Date: " + fc.GetDT.ToLongDateString());
}FormCalendar
public FormCalendar() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
this.Close();
}
public DateTime GetDT {
get {
return monthCalendar1.SelectionStart;
}
}https://stackoverflow.com/questions/41793657
复制相似问题