Страница: 1 |
Вопрос: Как узнать имя материнской (вызывающей) формы? | Добавлено: 14.12.07 01:31 |
Автор вопроса: ![]() |
У меня одна из форм (например, FORM2) в программе может вызываться из различных форм. И имена этих форм используются в самой FORM2. Например, при работе этой FORM2 надо присвоить form1.text1.text = “ssssss”. Как написать такой оператор присвоения, если form1 – это имя формы, откуда произошел вызов и внутри самой form2 он неизвестен? И еще дальше по этой же теме. Опять же из различныx форм FORM_1a, FORM_1b … и т.д. возможна загрузка этой моей формы FORM_2, причем она может загружаться как при двойном клике на каком-то поле, так и при клике на например Picture. Как узнать имя и тип элемента материнской формы FORM_1x, из которой произошел вызов дочерней формы FORM_2? Как, например, написать form_2.left= form1_1x.text1.left + 3000, когда надо определить имя вызывающей формы (form1_x) и имя элемента, по которому было обращение (клик или двойной клик, вобщем, он был в фокусе – text1)? |
Ответы | Всего ответов: 8 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #1 | Добавлено: 14.12.07 03:16 |
похоже на кривость проектирования проги, обычно таких желаний не возникает.
Можно вынести обрабытываемую функцию в модуль, и передавать этой функции ссылку на форму... т.е. в модулей что-то вроде public function myfunc (frm as Form) frm.text1 = "lalalla" end function И вызывать эту функцию из нужный форм, передавая в параметр ей ссылку на себя (т.е. Me) ну типа.. Private Sub Form1_Click() Call myfunc (Me) End Sub |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #2 | Добавлено: 14.12.07 05:35 |
Ну, разве что поизвращаться..
Option Explicit Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Const GWL_HWNDPARENT = (-8) Private Sub Form_Activate() ' до этого загружена как модальная Dim hwndParent As Long Dim frm As Form Dim prnt As Form Dim ctl As Control hwndParent = GetWindowLong(Me.hwnd, GWL_HWNDPARENT) If hwndParent Then For Each frm In Forms If frm.hwnd = hwndParent Then Set prnt = frm Set ctl = prnt.ActiveControl Exit For End If Next End If If Not prnt Is Nothing Then Debug.Print "Вызов из " & prnt.Name If Not ctl Is Nothing Then Debug.Print "Активный контрол " & ctl.Name End Sub Но, вообще, полностью согласен с HACKER. Не парься. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #3 | Добавлено: 14.12.07 15:09 |
А париться приходится!
Суть проблемы: при заполнении форм почти все поля у меня выбираются по справочнику (типа код товара, цвет, масть и проч). Для этого загружается универсальная форма. Когда выбор произведен, мне нужно в вызывающей форме проставить код товара например, а на два пальца правее - его наименование. Т.е. заполнить поля form1.kod.text и Form1.naim.text. Но этих похожи форм Form1, Form1a, Form1b много разных, поэтому мне надо знать, из какой формы произошел вызов чтобы знать, писать в form1.kod.text или form1a.kod.text При этом еще не только имена форм разные, но расположение того же kod.text на формах м б разное!!! Я вот тупо вижу только какую-то глоб. переменную REG=xxx присвоить значение, а в дочерней форме так же тупо сделать DO CASE по значению REG. Неужели нельзя короче и красивее? -------------------------------------------- И если допустим я как-то получила имя формы nameform="FORM1", имя textbox nametext="TEXT1", то как в VB пишется оператор присвоения типа x=FORM1.text1.text, чтобы вместо form1,text1 использовать переменные nameform, nametext??? |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 454 |
Профиль | Цитата | #4 | Добавлено: 14.12.07 17:27 |
'в модуле формы FormUnivers Public frm As Form Public ctl As Control 'в общем модуле: 'оформляем вызов FormUnivers в виде отдельной 'процедуры передавая в качестве параметров 'ссылки на вызывающую форму и какой-нибудь ее контрол Sub ShowUnivers(param1 As Form, param2 As Control) Set FormUnivers.frm = param1 Set FormUnivers.ctl = param2 FormUnivers.Show End Sub 'в коде FormUnivers можно ссылаться на 'объекты в переменных frm & ctl Private Sub Command1_Click() ctl.Text = "qwerty"' Debug.Print frm.Caption End Sub Надеюсь достаточно доходчиво объяснил. Удачи. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #5 | Добавлено: 15.12.07 00:53 |
Надеюсь достаточно доходчиво объяснил.
Неа. FormUnivers - это вызывающая или вызываемая форма? Как в моем примере - Form1 или Form2? |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #6 | Добавлено: 15.12.07 01:05 |
Вот у меня в форме FORM1 стоит:
Private Sub x1_DblClick()
Form1.Enabled = False form1.Visible = False Load form2 Form2.Show End Sub …………. Private Sub x2_DblClick() Form1.Enabled = False 'form1.Visible = False Load form2 Form2.Show End Sub Где нужно расставить твои строчки-операторы, чтобы в Form2 я могла обращаться к полям x1,x2 и знать имя вызывающей формы (FORM1)?? |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #7 | Добавлено: 15.12.07 02:35 |
Call ShowUnivers (Form1, Form2)
P.S. Аффтар в курсе что такое функция, параметры функции, что через параметры можно передавать не только переменные (значения) но и ссылки на объекты (и формы в том числе).. указатели на объекты, переменные.. ?? А то может мы тут зря с EUGY распинаемся ![]() |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #8 | Добавлено: 15.12.07 17:27 |
Функция - то что в заголовке, там же и параметры (в скобках).
Знаю. |
Страница: 1 |
|