  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 1 樓
  | 
		
			
				 發表於: 星期六 九月 23, 2023 2:28 pm    文章主題: combo使用陣列的問題 | 
				     | 
			 
			
				
  | 
			 
			
				簡單的一個表單(form1),只有一個物件combobox1(combo1)
 
form1.init
 
this.SetAll('fontname','fixedsys',)
 
DIMENSION _ary[3,2]
 
_ary[1,1]='a_01'
 
_ary[1,2]='這是第一筆'
 
_ary[2,1]='b_02'
 
_ary[2,2]='這是第二筆'
 
_ary[3,1]='c_03'
 
_ary[1,2]='這是第三筆'
 
this.combo1.RowSourceType= 5
 
this.combo1.RowSource='_ary'
 
this.combo1.ColumnCount=2
 
this.combo1.ColumnWidths='100'
 
this.combo1.Requery
 
 
執行的結果如附件。combo1往下拉時,選項都是空白。
 
但是如果把程式改成
 
form1.init
 
this.SetAll('fontname','fixedsys',)
 
public _ary[3,2]
 
_ary[1,1]='a_01'
 
_ary[1,2]='這是第一筆'
 
_ary[2,1]='b_02'
 
_ary[2,2]='這是第二筆'
 
_ary[3,1]='c_03'
 
_ary[3,2]='這是第三筆'
 
this.combo1.RowSourceType= 5
 
this.combo1.RowSource='_ary'
 
this.combo1.ColumnCount=2
 
this.combo1.ColumnWidths='100'
 
this.combo1.Requery
 
 
這樣就可以正確執行了。
 
請問各位先進,這是為什麼? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 2 樓
  | 
		
			
				 發表於: 星期六 九月 23, 2023 4:24 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				在form.init 所定義的陣列, 執行完init , 它就被丟掉, 無法用在這個form其它物件中.
 
 
你可以在form.init 將
 
DIMENSION _ary[3,2]
 
_ary[1,1]='a_01'
 
....
 
this.combo1.RowSource='_ary'
 
改成
 
thisform.addproperty('_ary[3,2]')
 
thisform._ary[1,1]='a_01'
 
....
 
this.combo1.RowSource='thisform._ary' _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 3 樓
  | 
		
			
				 發表於: 星期六 九月 23, 2023 5:15 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | garfield 寫到: | 	 		  在form.init 所定義的陣列, 執行完init , 它就被丟掉, 無法用在這個form其它物件中.
 
 
你可以在form.init 將
 
DIMENSION _ary[3,2]
 
_ary[1,1]='a_01'
 
....
 
this.combo1.RowSource='_ary'
 
改成
 
thisform.addproperty('_ary[3,2]')
 
thisform._ary[1,1]='a_01'
 
....
 
this.combo1.RowSource='thisform._ary' | 	  
 
 
原來是這樣。謝謝指導。所以如果把原來那段程式放在combo1.init,結果也是一樣對嗎?那麼自訂屬性確實是個好做法。
 
 
再請問:是不是只有在某物件init事件當中,被宣告的【陣列】才會這樣,【一般的變數宣告】也是如此嗎?...我這樣問是不是很奇怪!
 
那在其他event當中,如果有需要用到陣列,是不是也會碰到同樣的情形?
 
我的意思是:在一個事件程式中宣告了變數,結果卻不能拿來使用(比如運算),這不是很奇怪嗎?
 
 
如果也是如此,那就要宣告為public,或者是新增一個自訂屬性了? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 4 樓
  | 
		
			
				 發表於: 星期六 九月 23, 2023 5:30 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| 報告:跟我想的不一樣。可以指定別的物件。 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 5 樓
  | 
		
			
				 發表於: 星期六 九月 23, 2023 10:44 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				那是因為你不了解 form 裡面各個object 是怎麼運作的,
 
所以才會跟你想的不一樣.
 
你可以試著在form.load裡 寫一行 susp
 
你再用debug 去一步一步查看執行順序及變數變化的狀況. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		黃澤民
 
 
  註冊時間: 2003-09-08 文章: 66 來自: 新竹
  第 6 樓
  | 
		
			
				 發表於: 星期六 九月 23, 2023 11:36 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | garfield 寫到: | 	 		  那是因為你不了解 form 裡面各個object 是怎麼運作的,
 
所以才會跟你想的不一樣.
 
你可以試著在form.load裡 寫一行 susp
 
你再用debug 去一步一步查看執行順序及變數變化的狀況. | 	  
 
 
好的,再次謝謝您。我會去試試的。
 
有您真好。 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		CPS0204
 
 
  註冊時間: 2014-08-24 文章: 482
 
  第 7 樓
  | 
		
			
				 發表於: 星期一 九月 25, 2023 6:07 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				在form 的init
 
public my_array[3,2]
 
 
在form unload
 
release my_array | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |