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

时间:2011-11-24 16:33:48

标签: c# winforms

所以基本上,我有一个带有Calendar(frmCalendar)控件的表单。我有另一个有DatePicker(frmDatePicker)的表单。

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

我需要知道的是,我怎么能

  1. 检查frmCalendar是否已打开。
  2. 如果有,我如何获得MonthCalendar(mcUserDate)控件的值?
  3. 如果您需要了解上下文,则datePicker将设置Reports的当前quarterEnd日期,这些日期是在应用程序之外创建的。

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

    如果DatePicker默认为应用程序中选择的当前季度日期(如果已选择),则“很高兴”。

    修改

          Main Form
          |        \
          |         \
      frmCalendar    frmReports
                        \
                         \
                         frmDatePicker
    

    还好吗?

2 个答案:

答案 0 :(得分:2)

如果表格都在同一个应用程序中,我会亲自使用属性。我将有一个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 :(得分:0)

有几种方法可以解决这个问题:

  1. 表单本身保留一个指向自身的全局公共静态变量,并在创建表单时进行初始化。所以说frmCalender.Current!= null(然后它存在),那么你必须从frmCalender中制作出你想通过属性/任何东西访问公共/可用的控制。
  2. 一个全局表单列表,它是创建的所有表单的列表,表单在创建时自行放置。类似于(1)其余部分。
  3. 组件跟踪器(我目前使用此方法,它将每个组件混淆为自己的类包装器,并仅订阅其感兴趣的组件)。然后它可以Components.Find<componentWrapper>(),如果它存在,获取它并做任何事情。就像订阅组件的事件等
  4. 我确定还有很多方法,但我发现数字1最简单,但仍然使用它。