2009-10-28 76 views
0

這看起來很簡單,但我無法弄清楚。似乎我想將Locked屬性設置爲Yes,但實際上阻止他們在下拉列表中選擇任何內容!如何在Access 2000中只讀組合框?

當我說只讀時,我的意思是讓組合框預加載值並強制用戶只能選擇其中一個值而不能輸入自己的值。

任何想法?

+0

這通常被稱爲「下拉列表」,而不是「組合框」 – 2009-10-28 21:04:58

+2

不在訪問中。事實上,該名稱顯示了Microsoft開發工具中控件的起源,就像在16位Windows中一樣,該功能最初由文本框與列表框組合提供,因此「組合框」與組合框組合在一起將文本框和列表框合併爲一個控件。 – 2009-10-29 04:05:40

回答

2

有一個Limit To List屬性應該設置爲Yes

+0

First :) char char char – Fionnuala 2009-10-28 21:38:03

3

的標準方式實現這一目標是到Limit To List屬性設置爲True

用戶將能夠在輸入無效的文本,但如果他離開突舌或按下回車鍵彈出框將說

您輸入的文本不在 列表

項目

他將被迫回來從列表中選擇一些東西。

這不是很大的,比起你在其他地方獲得真正的下拉列表控件(VB6,的WinForms,.NET等)

+0

Access組合框可能沒有你喜歡的默認行爲,但它具有更多的屬性和事件,並且實用性更強。 Access組合框設計用於數據庫,您必須限制條目並通知用戶錯誤的條目。其他平臺不是專門爲數據庫應用程序的開發而設計的,因此它們對於如何處理無效輸入並不一定嚴格。這是Access中的一項功能,而不是一個BUG - 最好是有這種行爲,因爲它適合於創建Access的目的。 – 2009-10-29 04:14:44

+0

NotInList事件是有趣的和值得一提的,我提高了你的答案。 即使如此,只有在用戶輸入完畢後,它纔會被截斷並拒絕無效輸入。更好的用戶界面是提示用戶他必須從列表中選擇,只允許他從列表中選擇。 – hawbsl 2009-10-29 09:37:39

+0

如果您想要在AfterUpdate事件之前截取它*,您需要執行OnChange和BeforeUpdate事件。 OnChange事件不是評估組合框值的好地方,但BeforeUpdate事件是,因爲這是您可以預先限定數據並取消更新的位置。我不完全確定這些與NotInList事件有關的順序。 Access事件的要點是有一些默認處理所有事情,並且你可以編寫任何你喜歡的代碼來覆蓋默認行爲。 – 2009-10-30 02:54:42

2

有兩個部分,以您所要求的內容:

一。我的意思是讓組合框預裝值...

爲此,您無需做任何事情 - 只需適當設置rowsource。要將值添加到列表中,您必須做一些工作,但爲了防止,您無需執行任何操作。

b。並強制用戶只能選擇其中一個值,而不能使用 來鍵入它們自己的值。

正如其他答案中所述,您需要將LimitToList屬性設置爲TRUE。

現在,您將從中獲得的錯誤消息並不是那麼好,所以您可能希望將NotInList事件定義爲對用戶更友好些。像這樣的東西可能是適當的:

Private Sub MyCombo_NotInList(NewData As String, Response As Integer) 
    MsgBox Chr(34) & NewData & Chr(34) & _ 
     " is not one of the choices in the list.", _ 
     vbInformation, "Select from the list" 
    Me!MyCombo.Undo 
    Response = acDataErrorContinue 
    End Sub 

如果你想添加到列表中,這就是你搞定了,但是因爲你不這樣做,你只需要以通知用戶關心自己(即,保護它們免受隱含的默認錯誤信息的影響)。

0

你也可以添加此代碼到組合框的presskey事件

KeyAscil = 0 

msgbox " please select from list" 

這將防止寫入用戶爲組合框,並顯示消息錯誤