Сначала , не обращайтесь напрямую к элементам управления формы, это считается плохой практикой, вместо этого обращайтесь к зависимым данным через интерфейс:
(Предупреждение: непроверенный код и мой VB-фу ржавый, но вы должны понять общую идею)
public interface ILoginScreen
Property Username as String with Get
Property Password as String with Get
end interface
Реализуйте интерфейс в вашей форме. (И убедитесь, что ваш интерфейс не возвращает типы данных, такие как TextBox, ComboBox и т. Д., Которые противоречат цели абстракции интерфейса.)
Второй , не обращайтесь к зависимостям через глобальное состояние, такое как коллекция OpenForms, вместо этого передавайте свои зависимости объектам через конструктор.
Так что, если ваша форма отчетов зависит от вашего экрана входа в систему (или любого другого экрана), у вас должен быть конструктор, который принимает реализацию ILoginScreen:
public sub New(loginScreen as ILoginScreen)
me.LoginScreen = loginScreen
end sub
И создайте экземпляр формы ваших отчетов следующим образом:
dim reportScreen as new ReportScreen(Me)
'passes self as ILoginScreen implementation
Согласно ОП в комментариях:
На самом деле мне нужен ярлык, два
выбор даты и времени, 5 обзоров и
несколько наборов данных. Эти котролы имеют
Информация, которую я использую для своих параметров.
Очевидно, что OP передает эти элементы управления в качестве параметров отчета. Возможно, создание и реализация интерфейса является чрезмерным для его нужд, но общий принцип внедрения зависимостей верен.
Передайте ваши данные в конструктор формы отчета:
class Report
public sub New(start as DateTime, end as DateTime, label as String, _
etc as Whatever)
end class
Пожалуйста, убедитесь, что вы передаете такие вещи, как DateTimes, Strings, Integer, DataSets и т. Д. - или типизированный объект, представляющий ваши параметры.
Не передавайте DateTimePickers, TextBoxes, Comboboxes, DataGridViews и т. Д. Ваша форма отчета не должна знать или заботиться о том, что ее даты начала и окончания получены из DateTimePicker или нет, она должна заботиться только о том, чтобы на самом деле она имела даты некоторых Добрый. Ленивая передача элементов управления формой - верный способ разозлить следующего человека, который работает над вашим кодом.