получить доступ к компоненту на одной из вкладок из модуля данных

Может быть, это тривиально, но я не могу понять это... Я использую компоненты RAIZE, т.е. rzPageControl1, и один из моих листов называется PRO. Он (rzPageControl1) находится на Form1. Теперь у меня есть cxTextEdit4 на этом листе, к которому мне нужно получить доступ из Datamodule2.Tablename2 в событии новой записи.

Но не могу получить к нему доступ должным образом...

Кто-нибудь знает синтаксис?

Я старался ; Форма1.rzPageControl1. и т.д., но, похоже, Delphi не может перечислить мне доступные компоненты... Пожалуйста, помогите...


person user763539    schedule 04.07.2011    source источник
comment
Вы добавили модуль в предложение uses до того, как попытались получить доступ к вещам внутри Unit2 изнутри Unit3, верно? Вы не указали названия своих юнитов, так что вам сложно помочь. Похоже, вы еще не понимаете Uses-предложения?   -  person Warren P    schedule 04.07.2011
comment
Да, я добавил Unit1 в предложение uses (и наоборот).   -  person user763539    schedule 04.07.2011
comment
Я не менял имена юнитов, так как у меня их всего 2 (юнит 1 — форма 1, а юнит 2 — модуль данных 2).   -  person user763539    schedule 04.07.2011
comment
В дополнение к ответам на вашу актуальную проблему, я хотел бы указать, что, возможно, доступ к пользовательскому интерфейсу из вашего модуля данных потенциально является неоптимальным дизайном с точки зрения возможности повторного использования вашего модуля данных (и, следовательно, бизнес-логика). Лучше создать свои собственные события уровня модуля данных и подключить обработчики событий в форме. Например. в FormCreate — MyDataModule.OnNewCustomerRecord := HandleNewCustomerRecord. Где HandleNewCustomerRecord — это метод вашей формы.   -  person Stuart    schedule 04.07.2011
comment
Стюарт: Хорошая мысль. Либо отделите свой модуль данных от вашего пользовательского интерфейса, либо не делайте этого, но не делайте большой ком грязи, cher monsieur user.   -  person Warren P    schedule 04.07.2011
comment
+1 для Стюарта. Позвольте мне сделать это еще сильнее: НЕ ОБРАЩАЙТЕСЬ НЕПОСРЕДСТВЕННО К КОМПОНЕНТАМ ФОРМЫ, ФРЕЙМА ИЛИ МОДУЛЯ ДАННЫХ ВНЕ ЭТОЙ ФОРМЫ/ФРАМА/МОДУЛЯ ДАННЫХ. Правильный путь — пойти косвенно: ввести одно или несколько свойств/методов в целевой форме/фрейме/модуле данных, которые преобразуются в доступ к нужному компоненту. Всегда идите косвенным путем, потому что это уменьшает количество зависимостей, которые у вас есть между различными модулями, и уменьшает нагрузку на обслуживание, которая у вас уже есть. Например, это упрощает замену TLabel на TStaticText.   -  person Jeroen Wiert Pluimers    schedule 04.07.2011


Ответы (1)


Все компоненты формы находятся в области верхнего уровня под именем самой формы и не являются свойствами подкомпонента элемента управления страницы.

Вам нужен Form1.Button1, а не Form1.rzPageControl1.Button1, даже если Button1 физически перетаскивается на rzPageControl1.

В терминах Delphi мы говорим, что кнопка OWNED по форме, но PARENTED по вкладке в элементе управления страницей, что означает, что она отображается как часть конкретной подстраницы в элементе управления страницей, но она по-прежнему принадлежит (принадлежит) с точки зрения памяти и с точки зрения объема, по форме.

person Warren P    schedule 04.07.2011
comment
это было первое, что я сделал, но Delphi помечал мой код как ошибочный, когда я печатал... Поэтому я подумал, что должен вызвать конкретный лист... Я попробую еще раз позже... Думаю, я слишком устал. .. - person user763539; 04.07.2011
comment
Кажется, я пропустил часть жизненно важной информации, пока печатал (это то, что вы получаете, когда не спите всю ночь), и поэтому компилятор выдавал мне ошибку. однако Уоррен, вы правы... Форма - владелец всего. Это поставило меня на правильный путь, поэтому я тоже смог найти ошибку... Всем спасибо... О модуле данных: Лично я не нравится использовать его. Если у меня много форм, я предпочитаю, чтобы все таблицы/запросы были в уважаемых формах. Но если вы используете управление страницами и страницы, то это почти обязательно. Спасибо всем ... - person user763539; 04.07.2011
comment
Вы можете поместить весь свой контент для своих страниц в отдельные фреймы (или, если вы ненавидите фреймы, тогда формы) и подождать, чтобы создать их экземпляры, до момента выполнения. Это уменьшит размер и сложность вашей MegaForm, и в будущем, если некоторые страницы станут динамическими или необязательными, вы уже будете настроены для этого случая. MegaForms, особенно записные книжки с вкладками, полные элементов управления графическим интерфейсом, как правило, становятся неуправляемым беспорядком, даже если вы используете модули данных. - person Warren P; 04.07.2011