Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Как  узнать имя материнской (вызывающей) формы?
     
    
Добавлено: 14.12.07 01:31
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     nat-z
 nat-z
      
       
  
 
    
У меня одна из форм (например, 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 
      
Автор ответа: HACKER
 HACKER








 
Разработчик 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 
      
Автор ответа: EUGY
 EUGY





Вопросов: 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 
      
Автор ответа: nat-z
 nat-z









Вопросов: 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 
      
Автор ответа: EUGY
 EUGY





Вопросов: 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 
      
Автор ответа: nat-z
 nat-z









Вопросов: 13
Ответов: 85
      
 Профиль |  | #5
       
Добавлено:  15.12.07 00:53
       
    
       
  
Надеюсь достаточно доходчиво объяснил. 
 
    
Неа.
FormUnivers - это вызывающая или вызываемая форма? Как в моем примере - Form1 или Form2?
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: nat-z
 nat-z









Вопросов: 13
Ответов: 85
      
 Профиль |  | #6
       
Добавлено:  15.12.07 01:05
       
    
       
  
Вот у меня в форме FORM1 стоит:
 
    
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 
      
Автор ответа: HACKER
 HACKER








 
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
      
 Профиль |  | #7
       
Добавлено:  15.12.07 02:35
       
    
       
  
Call ShowUnivers (Form1, Form2)
 
    
P.S. Аффтар в курсе что такое функция, параметры функции, что через параметры можно передавать не только переменные (значения) но и ссылки на объекты (и формы в том числе).. указатели на объекты, переменные.. ?? А то может мы тут зря с EUGY распинаемся  
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: nat-z
 nat-z









Вопросов: 13
Ответов: 85
      
 Профиль |  | #8
       
Добавлено:  15.12.07 17:27
       
    
       
  
Функция - то что в заголовке, там же и параметры (в скобках).
 
    
Знаю.