  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		andy8m23
 
  
  註冊時間: 2004-02-09 文章: 30 來自: 我娘的肚子,出來很久了
  第 1 樓
  | 
		
			
				 發表於: 星期六 三月 19, 2005 2:42 pm    文章主題: 連接查詢表單的問題 | 
				     | 
			 
			
				
  | 
			 
			
				我有一個form
 
裡面有個cus欄位 ,cus欄位旁邊有個選擇botton 叫command1
 
在command1.click中
 
thisform.text2.value=stf('findcus')
 
stf為prg
 
para tmform
 
okkey=''
 
do tmform
 
return okkey
 
 
而findcus中,為一個grid,text1,和一個確定的botton
 
每點選grid的格子會將值帶入text1
 
在botton
 
okkey=thisform.text1.value
 
thisform.release()
 
return okkey
 
 
執行時,第一次點選選擇botton 都可以順利帶回值
 
但第二次點選時就會出現
 
載入檔案錯誤-記錄編號4.fORM1 或其成員中的一個 載入表單或資料環境
 
:THISFORM 只能在方法程序中使用
 
 
             [取消(c)]              [忽略(I)] [說明(I)]
 
    
 
不過很奇怪,好像只是重復按選擇BOTTON 資料都可以一直帶回
 
但按了新增後才會出現這樣
 
我的新增裡面是
 
select order
 
repl order.ordno with thisform.text1.value
 
repl order.cusno with thisform.text2.value
 
repl order.ordname with thisform.text3.value
 
=tableupdate(.t.)
 
thisform.refresh()
 
目前是還好,因為按了忽略後,再點一次,又可以作選擇了
 
不過就是接下來就要點一次忽略一次再點一次才能選擇
 
在這裡要先感謝garfield,他跟我說在thisform.text1.value=stf('form')中
 
form要設為模式,值才代的回來 _________________ 登入結束編譯檔<----會了          -->密碼管制鎖登入
 
新增修刪查列印<----功力尚淺  -->功能表單建群組
 
表格輸出轉換檔<----有點模糊  -->各式文檔互轉換
 
遠端資料共分享<----未來目標  -->多端連接資料庫 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 2 樓
  | 
		
			
				 發表於: 星期六 三月 19, 2005 3:14 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 代碼: | 	 		  
 
okkey=thisform.text1.value 
 
thisform.release() 
 
return okkey 
 
 | 	  
 
return okkey 這行指令有沒有存在都無所謂, 因為form的傳回值不是在這裡定義的.
 
 
 	  | 代碼: | 	 		  
 
載入檔案錯誤-記錄編號4.fORM1 或其成員中的一個 載入表單或資料環境 
 
:THISFORM 只能在方法程序中使用 
 
 | 	  
 
有可能是你在呼叫form之前有用set filter to 欄位=thisform.text1.value
 
你可以改用別的方法試看看.
 
 
說明一下form如何傳回值, 方法有很多種, 我只說我常用的:
 
1.在form.unload 裡最後一行程式碼 return 要傳回的值 , 在呼叫這個form的語法為 do form 這個form with 參數1,參數2..... to 接收的變數名稱
 
2.在form.init 裡的第一行程式碼裡有 para 來接受傳來的 "物件" , 在呼叫這個form的語法為 do form 這個form with this
 
  例在 form.init裡的程式碼如下
 
para myobject
 
thisform.addproperty('objectname')
 
thisform.objectname=myobject
 
在這個form的某段程式, 例如是click某個按鈕要將欲傳回的值填入你要的地方, 則這個按鈕.click( )程式碼如下:
 
thisform.objectname.value = 你要傳回的值
 
 
其它的做法就看有沒有人要提出自己獨到的見解..... _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		andy8m23
 
  
  註冊時間: 2004-02-09 文章: 30 來自: 我娘的肚子,出來很久了
  第 3 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 2:43 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				果然是前輩,我真的是用過set filter ,所以我要離開查詢表單時,應該set filter to 先回復原狀再傳值回去
 
用以上這個招,很不錯,可以不用沒個選擇按紐都要打thisform.XXXX.value=傳回值
 
可不可以問一下,就是以上例子而言,在查詢前的按紐中,要do form with myobject to 傳回值
 
myobject 是不是用 myobject=thisform.text1.class _________________ 登入結束編譯檔<----會了          -->密碼管制鎖登入
 
新增修刪查列印<----功力尚淺  -->功能表單建群組
 
表格輸出轉換檔<----有點模糊  -->各式文檔互轉換
 
遠端資料共分享<----未來目標  -->多端連接資料庫 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 4 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 10:50 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				這句話我不懂 "myobject 是不是用 myobject=thisform.text1.class",
 
thisform.text1.class 是什麼? _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		andy8m23
 
  
  註冊時間: 2004-02-09 文章: 30 來自: 我娘的肚子,出來很久了
  第 5 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 11:52 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				對不起,我搞錯了,真是不好意思
 
在 form.init裡的程式碼如下 
 
para myobject<-----我想問的是這個裡面是不是放 (物件) 欲傳回的值填入你要的地方的(物件)
 
thisform.addproperty('objectname') 
 
thisform.objectname=myobject 
 
在這個form的某段程式, 例如是click某個按鈕要將欲傳回的值填入你要的地方, 則這個按鈕.click( )程式碼如下: 
 
thisform.objectname.value = 你要傳回的值 _________________ 登入結束編譯檔<----會了          -->密碼管制鎖登入
 
新增修刪查列印<----功力尚淺  -->功能表單建群組
 
表格輸出轉換檔<----有點模糊  -->各式文檔互轉換
 
遠端資料共分享<----未來目標  -->多端連接資料庫 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 6 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 11:53 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				請教garfield 兄
 
依您的說明,如果我在一個表單的uload事件中,想要傳回的是一個物件(不是某個物件的屬性值)
 
應該如何做呢?如下例:
 
 
Form1.unload
 
  Return this.Container1   <------ 一個物件
 
 
可是總是會有錯誤訊息而無法達成... | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		andy8m23
 
  
  註冊時間: 2004-02-09 文章: 30 來自: 我娘的肚子,出來很久了
  第 7 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 12:15 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				感謝澤民兄,我想表達的也是這個意思,剛去找Garfield兄的文章,有提到這個
 
 
我的做法是在FORM中多一個屬性 .activeobject ,在每個物件的 .GetFocus內皆加入一行指令, Thisform.activeobject = this 
 
 
搜尋物件名稱就可以找到了,應該有用 _________________ 登入結束編譯檔<----會了          -->密碼管制鎖登入
 
新增修刪查列印<----功力尚淺  -->功能表單建群組
 
表格輸出轉換檔<----有點模糊  -->各式文檔互轉換
 
遠端資料共分享<----未來目標  -->多端連接資料庫 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 8 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 1:47 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				to 黃澤民, 
 
thisform裡面的東西在form關閉時就已經不存在了, 甚至在unload時, 物件都幾乎不存在了, 怎麼可能可以還將物件傳回去, 你可以試著不要release, 用 .visible=.f. 看看是否可行. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 9 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 4:59 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				To Garfield兄:
 
我想也是,剛才試了一下,果真是,但是
 
就像您說的,經過了release,物件都不存在了,那return  (thisform.myobj.value) 還有意義嗎? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 10 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 5:09 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				接上題,因為Do form myform with p1,p1 to v1
 
其中myform 的視窗是model模式,如果不加release
 
那麼程式是無法往下繼續的....
 
所以說... | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 11 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 6:09 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				所以說你要用我講的第2種方法才行 _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 12 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 8:30 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				史兄:
 
依您的方法,我在表單設計階段及自訂一個屬性MyObj
 
然後在Form.init事件中定義
 
Form.init
 
para p1,p2
 
this.Myobj = This.container1
 
然後在Form.unload事件中定義
 
 
Form.unload
 
return this.myobj
 
 
結果依然還是不行 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		andy8m23
 
  
  註冊時間: 2004-02-09 文章: 30 來自: 我娘的肚子,出來很久了
  第 13 樓
  | 
		
			
				 發表於: 星期日 三月 20, 2005 11:47 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				http://home.kimo.com.tw/andy8m23/klun.rar
 
這個是我測試的表單傳值,不管在formB 輸入什麼,回來的都是T _________________ 登入結束編譯檔<----會了          -->密碼管制鎖登入
 
新增修刪查列印<----功力尚淺  -->功能表單建群組
 
表格輸出轉換檔<----有點模糊  -->各式文檔互轉換
 
遠端資料共分享<----未來目標  -->多端連接資料庫 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		bigear
 
  
  註冊時間: 2004-12-19 文章: 162 來自: 網路的另一端
  第 14 樓
  | 
		
			
				 發表於: 星期一 三月 21, 2005 2:09 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | andy8m23 寫到: | 	 		  http://home.kimo.com.tw/andy8m23/klun.rar
 
這個是我測試的表單傳值,不管在formB 輸入什麼,回來的都是T | 	  
 
 
幫你改好了
 
 
 	  | 黃澤民 寫到: | 	 		  | return this.myobj | 	  
 
 
這個觀念是錯誤的
 
FormB 傳資料給 FormA 不能用 return 
 
小弟個人常用兩種方式傳
 
1.設一個 public 變數讓 FormA 接收
 
2.將變數直接丟到 text.value
 
 
請參考修改檔案 _________________ 以上淺見,歡迎批評指教 
 
________________________________________________ 
 
山不轉路轉,路不轉人轉,人不轉頭轉,頭不轉眼睛轉,眼睛不轉眼珠轉 
 
眼珠再不轉就去睡覺,睡起來繼續轉 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 15 樓
  | 
		
			
				 發表於: 星期一 三月 21, 2005 8:19 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				bigear說的方法就是第3種方法, 先去研究他的方法,
 
我舉一個例子說明我的第2種方式, 這種方式你可以將它想成像我們在用副程式接收參數時有兩種, 1是傳值,2是傳址 , 這個方式就是傳址,
 
可能你們比較少用, 所以對它都不熟.
 
例:
 
在A form中有一個物件 text1 , 在text1.dblClick() 中寫一行程式
 
do form B with this
 
則它在dobule click 時會去執行 FORM B , 且傳這個text1的物件(的位置)給它.
 
 
在 B form中的.init 中有3行程式
 
para myobject
 
thisform.addproperty('objectname') 
 
thisform.objectname=myobject 
 
假設你有個grid在秀資料讓人選擇, 且有個按鈕的物件叫做 .send1 , 則你在 .send1.click( ) 中只要寫兩行程式:
 
thisform.objectname.value = 你要傳回的值    &&--這個thisform.objectname 本質上只是一個指向 A form 中的那個 .text1的物件
 
thisform.release
 
不須在unload中傳回值
 
************
 
以上請自己動手試一試就知道它的奧妙之處. 祝你成功.!! _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |