Каков наиболее эффективный способ доступа к элементам управления других форм в .NET? - PullRequest
0 голосов
/ 19 марта 2010

Я создаю приложение для составления отчетов, и нашим клиентам потребуется сгенерировать довольно большие отчеты, которые требуют совсем немного памяти.В последнее время я настроен на перефакторинг, поэтому мне было интересно, каким будет лучший способ доступа к свойствам другой открытой формы (средство просмотра отчетов открывается в новой форме). Пока у меня есть:

Dim form As MainSelections

form = My.Application.OpenForms (2)

yay или nay.

Спасибо

* Редактировать - вероятно, я должен упомянуть, что мне нужен ярлык, два средства выбора даты, 5 представлений и несколько наборов данных.У этих котролов есть информация, которую я использую для своих параметров

1 Ответ

3 голосов
/ 19 марта 2010

Сначала , не обращайтесь напрямую к элементам управления формы, это считается плохой практикой, вместо этого обращайтесь к зависимым данным через интерфейс:

(Предупреждение: непроверенный код и мой 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 или нет, она должна заботиться только о том, чтобы на самом деле она имела даты некоторых Добрый. Ленивая передача элементов управления формой - верный способ разозлить следующего человека, который работает над вашим кодом.

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