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

本文关键字:如果 控件 获取 何检查 表单 是否 检查 | 更新日期: 2023-09-27 18:15:44

基本上,我有一个带有日历(frmCalendar)控件的表单。我有另一个表单,有一个日期picker (frmDatePicker)。

frmDatePicker可以在创建frmCalendar之前打开。

我想知道的是,我怎样才能

  1. 检查是否打开了frmCalendar
  2. 如果它有,我该如何获得MonthCalendar(mcUserDate)控件的值?

如果您需要知道上下文,datePicker将为报表设置当前季度结束日期,这些报表是在应用程序外部创建的。

日历在应用程序内部使用。

如果DatePicker将默认为应用程序中选择的当前季度日期(如果它已被选择),这是一个"很好的"。

编辑

      Main Form
      |        '
      |         '
  frmCalendar    frmReports
                    '
                     '
                     frmDatePicker

还容易吗?

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

如果表单都在同一个应用程序中,我个人会使用属性的。我将有一个formOpened属性,它返回一个bool来检查表单是否已打开,我将有一个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;
            }
        }
    }

有几种方法可以做到:

  1. 表单本身保留一个全局公共静态变量,该变量指向自身,并在创建表单时初始化。输入frmcalendar。= null(那么它就存在了),那么你就必须在frmCalender中设置任何你想要访问的控件,通过properties/whatever来公共/可用。
  2. 一个全局表单列表,它是所有已创建表单的列表,表单在创建时将自己置于其中。其余部分与(1)类似。
  3. 一个组件跟踪器(我目前使用这个方法,它将每个组件模糊到它自己的类包装器中,只订阅它感兴趣的组件)。然后它可以做Components.Find<componentWrapper>(),如果它存在,得到它并对它做任何事情。比如订阅组件的事件等。

我相信还有更多的方法,虽然我觉得第一个最简单,仍然使用它。

相关文章: