如何检查表单是不是已打开,如果已打开,则从控件中获取值?

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 是不是已更改?迅速

ReactNative:如何检查用户是不是已授予 gps 权限

如何检查 WPF 应用程序是不是已在运行? [复制]

如何检查所有文本框是不是已填充? [复制]

如何检查控件是不是已添加到视图中?