提示用户使用MonthCalendar控件选择日期

时间:2017-01-22 16:57:52

标签: c# .net winforms

我正在编写Winform应用程序,并且在某些时候我想提示用户从日历中选择日期。所以在浏览Google之后我想我可以使用MonthCalendar控件来实现这一点。现在这就是我所拥有的:

    MonthCalendar monthCalendar = new MonthCalendar();
    monthCalendar.Show();

问题是到达此代码时没有任何反应。我做错了什么?

由于

2 个答案:

答案 0 :(得分:0)

这样做并不困难。下面的代码使用了一个小Form,其中MonthCalenderButton在设计器中创建,如下所示。

enter image description here

此表单由另一个“父”表单调用。当用户点击“完成”按钮时,父表单可以使用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;
  }
}

答案 1 :(得分:0)

这是非常基本的窗体表格处理。

MonthCalender是一个控件。你不能只显示控件。控件只能显示在ContainerControl上。 ContainerControl是一个控件,可以保存其他控件并注意它们的显示。

最着名的ContainerControl之一是Form。在visual studio中,我们通常使用设计器来创建表单并将控件放在其上。

根据您是否只在一个特定表单上使用特殊MonthCalender,或者是否要在多个表单上重复使用它,您必须决定是将MonthCalender放在表单上还是用户控件上。

用户控件的优点在于您可以使用visual studio中的设计器将您的特殊MonthCalender拖放到任何表单上。

但最后,您必须将MonthCalender放在表单上的某个位置。一旦您显示表单,就会显示MonthCalender。

public class MySpecialForm : Form
{
    public MySpecialForm()
    {
        InitializeComponent();
    }
}

上面是由Visual Studio设计人员在项目中添加表单后创建的:右键单击项目的“解决方案资源管理器”,然后选择“添加 - Windows窗体”

在设计器中,选择工具箱(菜单视图工具箱),在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);
        }
    }