Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать кто открыл форму, через Sender 
:(
    Опции темы
ТоляМБА
Дата 9.6.2015, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



Есть Form1 с двумя пунктами меню MenuItem1,2
Есть Form2 с двумя едитами Edit1,2
Надо чтобы при нажатии на MenuItem1 открывалась Form2 с Edit2.visible:=false, а при нажатии на MenuItem2 открывалась Form2 c Edit1.visible:=false;

Можно сделать на процедуру нажатия меню Menuitem1 код
Код
Form2.Edit2.visible:=false;
Form2.ShowModal;
для MenuItem2 аналогично

Но мне надо знать из формы 2 при открытии формы (например в procedure TForm2.FormShow(Sender: TObject); ) каким пунктом меню было вызвано Form2.ShowModal;

Подозреваю что можно через Sender но не знаю как.
PM   Вверх
superVad
Дата 9.6.2015, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Собственно, чего тут знать? если Edit2.Visible = false то Menuitem1 и наоборот.
PM MAIL   Вверх
ТоляМБА
Дата 9.6.2015, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



superVad, это если я из Form1 это значение задам. Я же хочу задавать это значение из Form2 в зависимости от того пункта меню на Form1 которым была открыта Form2.
PM   Вверх
Poseidon
Дата 10.6.2015, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



В Form2 создаешь property. До вызова ShowModal заполняешь эту пропертю. В FormShow считываешь. Как-то так:

Form1
Код

{Можно "повесить" на OnClick обоих MenuItem}
procedure TForm1.MenuItemClick(Sender: TObject);
begin
  Form2.MenuItem := Sender as TMenuItem;
  Form2.ShowModal;
end;


Form2
Код

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormShow(Sender: TObject);
  private
    FMenuItem: TMenuItem;
  public
    property MenuItem: TMenuItem write FMenuItem;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
  if FMenuItem = Form1.MenuItem1 then
    Edit2.Visible := False;

  if FMenuItem = Form1.MenuItem2 then
    Edit1.Visible := False;
end;


Правда мне не очень нравится обращение к Form1 из метода TForm2.FormShow. Возможно я бы сделал через Tag или еще как-нибудь. Но общий принцип, думаю. понятен.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
superVad
Дата 10.6.2015, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Цитата(ТоляМБА @  9.6.2015,  16:21 Найти цитируемый пост)
superVad, это если я из Form1 это значение задам. Я же хочу задавать это значение из Form2 в зависимости от того пункта меню на Form1 которым была открыта Form2.


Как я понял - надо всю логику перенести в Form2. Тут я могу только какие то свои мысли написать.

Привязываться к Menuitem - плохо. Есть две причины. Возможно, потом надо будет этот же экшн (желательно, что бы айтим вызывал экшн из ЭкшнМенеджера или ЭкшнЛиста) вызывать еще и из контекстного меню и с панельки и с клавиатуры... Формы не должны знать ничего друг про друга - инкапсуляция, такое всякое... Т.е. плохо когда Form1 обращается к эдитам Form2 и плохо когда Form2 знает про Menuitem Form1.

Как сделал бы я:
Убрал Form2 из автосоздания.
Создавал и показывал Form2 через классовый метод (если интересно могу подробнее, я тут где то про это уже писал).
Ну и собственно для каждого варианта вызова: или передавал разные параметры в этот классовый метод, или сделал несколько классовых методов для каждого случая.
PM MAIL   Вверх
Агрох
Дата 16.6.2015, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 6.4.2013
Где: Москва

Репутация: 3
Всего: 6



В Form2 добавь процедуру
Код

procedure TForm2.MyShowModal(Param: Integer);
begin
  case Param of
    1: Edit1.Visible := false;
    2: Edit2.Visible := false;
  end;
  ShowModal;
end;


Ну и из Form1 вызывай не Form2.ShowModal а Form2.MyShowModal(SomeIndex);

Можно аналогично предложенному Poseidonом:
Код

procedure TForm2.MyShowModal(Sender: TObject);
begin
  if Sender = Form1.Button1 then Edit1.Visible := false else
  if Sender = Form1.Button2 then Edit2.Visible := false;
  ShowModal;
end;


Ну и вызов при нажатии кнопки будет
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
  Form2.MyShowModal(Sender);
end;

--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.