【发布时间】:2023-03-09 21:20:01
【问题描述】:
我在一个表单 (statsform) 上有一个日历控件,我从另一个表单导出表单调用它:
这是我实例化 exportform 的 statsform 中的代码:
private void export_Click(object sender, EventArgs e)
{
if (formIsHidden == 0)
{
ExportForm exportForm = new ExportForm();
exportForm.Show();
formIsHidden = 1;
}
}
每次点击时,我都会在 statsform 中更新日历控件中的日期:
public void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
dateFromLabel.Text = dateFromCalendar.SelectionStart.ToString("dd/MM/yyyy");
}
public void monthCalendar2_DateChanged(object sender, DateRangeEventArgs e)
{
dateToLabel.Text = dateToCalendar.SelectionStart.ToString("dd/MM/yyyy");
}
这是来自form2的代码(试图获取 selectionStart 属性并使用它)
(On button click)
statsform statsform = new statsform();
string startDate = statsform.dateFromCalendar.SelectionStart.ToString("yyyy-MM-dd 00:00:00");
string endDate = statsform.dateToCalendar.SelectionStart.ToString("yyyy-MM-dd 23:59.00");
(Pass date to SQL Queries)
但是,选择的日期不会传递给 exportform,当我创建断点并检查字符串时,只会传递当前日期。
是因为我正在创建表单的新实例吗?如何将用户选择的日期从表单传递到第二个表单?
statsform(create Calendar) -> exportform(按钮点击事件 - 从 statsform 日历控件中检索 selectedDate)
我的解决方案:
public ExportForm(statsform parent)
{
InitializeComponent();
statsform = parent;
}
允许我使用表单的现有实例。我需要构造函数中的 (this),所以感谢所有帮助。
【问题讨论】:
-
显然你并不是真的要使用
new statsform()。那是一个新的表单对象,用户还没有看到它的日历。所以还不可能选择日期。使用现有实例,即用户正在查看的实例。如有必要,向表单添加一个字段以存储该实例,并使用其 FormClosed 事件将其设置回 null。 -
如何使用form2中已有的实例?
-
你太难帮你了,我在sn-p里只看到ExportForm和statsform。 “form1”和“form2”可能是什么尚不清楚。当类型与对象的概念仍然不清楚时,很难在 Winforms 中取得进展,它是无情的 OOPy。如果您不顾一切,请从 Application.OpenForms 中找到它。
-
对不起。我只是使用名称“form 1”和“form 2”让事情变得更简单。我已经更新了代码。 Form 1 是 statsform,form2 是 exportform
标签: c# winforms monthcalendar