Как я могу проверить, была ли форма открыта, и если она есть, получить значение из элемента управления? - PullRequest
0 голосов
/ 24 ноября 2011

Итак, в основном, у меня есть форма с элементом управления Calendar (frmCalendar). У меня есть другая форма, которая имеет DatePicker (frmDatePicker).

frmDatePicker может быть открыт еще до того, как будет создан frmCalendar.

Что мне нужно знать, как я могу

  1. Проверьте, был ли открыт frmCalendar.
  2. Если это так, как я могу получить значение элемента управления MonthCalendar (mcUserDate)?

Если вам необходимо знать контекст, datePicker должен установить текущую дату квартала для отчетов, которые создаются вне приложения.

Календарь используется внутри приложения.

Приятно иметь, если DatePicker по умолчанию будет использовать текущую квартальную дату, выбранную в приложении (ЕСЛИ она была выбрана).

EDIT

      Main Form
      |        \
      |         \
  frmCalendar    frmReports
                    \
                     \
                     frmDatePicker

все еще легко?

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Если обе формы находятся в одном приложении, я бы лично использовал свойства. У меня будет свойство formOpened, которое возвращает логическое значение для проверки, открыта ли форма, и у меня будет свойство quarEndingDate, которое будет возвращать DateTime из datePicker.

т.е. в основной форме:

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;
            }

        }
    }
0 голосов
/ 24 ноября 2011

Есть несколько способов сделать это:

  1. Форма сама хранит глобальную общедоступную статическую переменную, которая указывает на себя и инициализируется при создании формы. Так, скажем, frmCalender.Current! = Null (тогда он существует), и вам придется изнутри frmCalender сделать любой элемент управления, к которому вы хотите получить доступ: общедоступный / доступный через свойства / что угодно.
  2. Глобальный список форм, который представляет собой список всех созданных форм, в которые форма помещает себя при создании. Аналогично (1) для остальных.
  3. Компонентный трекер (в настоящее время я использую этот метод, он запутывает каждый компонент в свою собственную оболочку класса и подписывается только на те компоненты, которые ему интересны). Затем он может сделать Components.Find<componentWrapper>() и, если он существует, получает его и делает с ним что угодно. Как подписка на события компонента и т. Д.

Я уверен, что есть еще много способов, хотя я считаю номер 1 самым простым и все еще использую его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...