我正在编写Winform应用程序,并且在某些时候我想提示用户从日历中选择日期。所以在浏览Google之后我想我可以使用MonthCalendar控件来实现这一点。现在这就是我所拥有的:
MonthCalendar monthCalendar = new MonthCalendar();
monthCalendar.Show();
问题是到达此代码时没有任何反应。我做错了什么?
由于
答案 0 :(得分:0)
这样做并不困难。下面的代码使用了一个小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;
}
}
答案 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);
}
}