如何检查表单是不是已打开,如果已打开,则从控件中获取值?
Posted
技术标签:
【中文标题】如何检查表单是不是已打开,如果已打开,则从控件中获取值?【英文标题】:How can I check if a form has been opened, and if it has, get the value from the control?如何检查表单是否已打开,如果已打开,则从控件中获取值? 【发布时间】:2011-11-24 16:33:47 【问题描述】:所以基本上,我有一个带有 Calendar(frmCalendar) 控件的表单。我有另一个具有 DatePicker (frmDatePicker) 的表单。
frmDatePicker 甚至可以在创建 frmCalendar 之前打开。
我需要知道的是,我该怎么做
-
检查 frmCalendar 是否已打开。
如果有,我将如何获取 MonthCalendar(mcUserDate) 控件的值?
如果您需要了解上下文,datePicker 用于为在应用程序外部创建的报告设置当前的季度结束日期。
日历在应用程序内部使用。
如果 DatePicker 将默认为应用程序中选择的当前季度日期(如果已选择),那将是“很高兴”。
编辑
Main Form
| \
| \
frmCalendar frmReports
\
\
frmDatePicker
还容易吗?
【问题讨论】:
同一个应用程序中有两种不同的形式?或两个不同的应用程序。 【参考方案1】:如果表单都在同一个应用程序中,我会个人使用属性。我会有一个 formOpened 属性,它返回一个布尔值来检查表单是否已打开,我会有一个 QuarterEndingDate 属性,它会从 datePicker 返回 DateTime。
即在主窗体中:
if (frmcalender != null)
if (frmcalender.formOpened)
textBox1.Text = frmcalender.quarterEndDate.ToShortDateString();
在frmCalender中:
public partial class frmCalendar : Form
bool activated;
public frmCalendar()
InitializeComponent();
activated = true;
public bool formOpened
get
return activated;
public DateTime quarterEndDate
get
return mcUserDate.Value;
set
mcUserDate.Value = value;
【讨论】:
我不太确定它是否那么容易。请阅读我所做的编辑,以更好地可视化我在做什么。 (也许它不会改变什么?) 它应该仍然有效。您可能必须在 frmReports 和 frmDatePicker 之间级联属性。您的问题是了解另一种形式的状态。只要您有对该表单属性的引用,就是最好的方法。【参考方案2】:有几种方法可以解决这个问题:
-
表单本身保留一个全局公共静态变量,该变量指向自身并在创建表单时初始化。所以说 frmCalender.Current != null (然后它存在),然后你必须从 frmCalender 中进行任何你想通过属性访问公共/可用的控制/无论什么。
一个全局表单列表,它是所有已创建表单的列表,表单在创建时将其放置在其中。其余部分与 (1) 类似。
组件跟踪器(我目前使用这种方法,它将每个组件混淆到自己的类包装器中,并且只订阅它感兴趣的组件)。然后它可以做
Components.Find<componentWrapper>()
,如果它存在,得到它并用它做任何事情。比如订阅组件的事件等等。
我确信还有更多方法,尽管我发现第 1 种方法最简单,并且仍然使用它。
【讨论】:
以上是关于如何检查表单是不是已打开,如果已打开,则从控件中获取值?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Application CRUD - 想要检查表单数据是不是已修改
每当打开我的应用程序时,您将如何检查 DATE 是不是已更改?迅速