亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Textbox 的自動(dòng)完成(Auto Completion)功能

系統(tǒng) 1747 0

Textbox 的自動(dòng)完成(Auto Completion)功能

張洪舉( http://www.vfptop.com ) Microsoft Visual FoxPro MVP

概述

在即將發(fā)布的VFP9.0(公測Beta版可以從 http://msdn.microsoft.com/vfoxpro/ 下載)中,為Textbox控件增加了類似IE瀏覽器的“自動(dòng)完成”(AutoCompletion)功能。在IE瀏覽器的地址欄中,用戶輸入一個(gè)鏈接地址,會(huì)顯示一個(gè)與之相匹配的所有地址列表,同樣,在網(wǎng)頁中的某些文本框中,也會(huì)保留用戶最近輸入過的詞條列表,如http://mail.163.com的“用戶名”文本框,如圖1所示。VFP9將使用數(shù)據(jù)表來提供“自動(dòng)完成”支持,所以FoxPro程序員可以很容易地修改其中的內(nèi)容,該功能可以提供一個(gè)類似組合框功能的支持。
圖1 IE瀏覽器中文本框的下拉列表

解決方案

鍵盤、鼠標(biāo)、筆在文本框中的觸發(fā)動(dòng)作方式
? 重要事項(xiàng):當(dāng)從文本框的下拉列表中選擇項(xiàng)目后,則整個(gè)文本框中的內(nèi)容會(huì)被該項(xiàng)目內(nèi)容替換,即使先前在文本框中輸入了內(nèi)容。
? 當(dāng)用戶使用鼠標(biāo)或筆在文本框中第一次單擊時(shí),將自動(dòng)顯示一個(gè)可用選擇的下拉列表,用戶然后可以移動(dòng)鼠標(biāo)到列表項(xiàng)上進(jìn)行選擇,選擇后,該列表項(xiàng)將自動(dòng)插入到文本框中。
? 如果用戶通過鍵盤定位到文本框,只到在文本框中輸入一個(gè)字符時(shí),才自動(dòng)顯示下拉列表,空格鍵將觸發(fā)整個(gè)列表。注意:列表的大小(可見顯示限制)在Options對話框的View選項(xiàng)卡中設(shè)置。
? 當(dāng)下拉列表第一次顯示時(shí),下拉列表的內(nèi)容根據(jù)用戶輸入的內(nèi)容進(jìn)行篩選,在下拉列表中僅顯示包含用戶所輸入內(nèi)容的列表項(xiàng),如果沒有列表項(xiàng)可匹配,將隱藏下拉列表。當(dāng)按下了退格(backspace)或刪除(delete)鍵,下拉列表會(huì)根據(jù)匹配結(jié)果重新調(diào)整下拉列表的大小。注意:用戶在文本框中輸入時(shí),不會(huì)自動(dòng)選擇下拉列表中的項(xiàng)目,如果要選擇項(xiàng)目,可以使用上/下箭頭、上翻(PageUp)、下翻(PageDown)鍵或鼠標(biāo)來完成操作。
? 如果用戶按下了回車(Enter)或Tab鍵,則在下拉列表中選定項(xiàng)目的內(nèi)容會(huì)自動(dòng)插入到文本框中。注意:如果用戶已經(jīng)在文本框中輸入有空格,則會(huì)首先剪裁掉這些前導(dǎo)空格。
? 當(dāng)列表項(xiàng)被選定并插入到文本框中時(shí),將進(jìn)行如下“自動(dòng)完成”表更新:
o 如果是一個(gè)新項(xiàng)目,將增加一條新記錄。
o 如果在表中已經(jīng)存在該項(xiàng)目,將更新Updated、Count和Data 字段,并只存儲文本的最近指定情況。
注意:如果第一次輸入時(shí)指定的“自動(dòng)完成”表不存在,將自動(dòng)建立該表。
? 如果用戶在已具有的文本的文本框中重新輸入,將在下拉列表中顯示精確匹配的項(xiàng)目以及在精確匹配文本之外包含有其他附加文本的項(xiàng)目。
? 文本的顯示和內(nèi)容區(qū)分大小寫,因此,在“自動(dòng)完成”表中只存儲文本項(xiàng)目的一個(gè)實(shí)例,也就是存儲最近輸入的實(shí)例。例如,如果Hong Ju已經(jīng)存儲在“自動(dòng)完成”表中,這時(shí)用戶又輸入了HONG JU,則將用HONG JU替換掉原來的Hong Ju,使用這種方法可以只顯示最近的版本。此外,在保存時(shí)也會(huì)刪除掉文本頭尾的多余空格。
? 下拉列表中的項(xiàng)目可以從列表中刪除掉。方法是在下拉列表打開時(shí),選定要?jiǎng)h除的列表項(xiàng)并按Delete鍵,這時(shí)會(huì)為該記錄添加刪除標(biāo)記,并且不會(huì)提示警告信息。當(dāng)項(xiàng)目被刪除時(shí),只影響下拉列表的內(nèi)容,而不會(huì)更新被編輯的實(shí)際字段。

AutoComp表

用于自動(dòng)完成的數(shù)據(jù)默認(rèn)存儲在AutoComp.DBF表中,該表的結(jié)構(gòu)如下:
字段名稱字段類型說明
Source C (20)自動(dòng)完成控件的源名稱
DataC (254)在控件中顯示的數(shù)據(jù)
CountI項(xiàng)目被選擇的次數(shù)
WeightI這是用于用戶自定義的字段
CreatedT日期時(shí)間字段,是第一次建立時(shí)的唯一時(shí)間戳
UpdatedT日期時(shí)間字段,是最近更新時(shí)的唯一時(shí)間戳
UserM用戶字段
“自動(dòng)完成”表被文本框的AutoCompSource屬性引用,因此,每個(gè)文本框可以具有自己的“自動(dòng)完成”表。當(dāng)一個(gè)文本框被允許使用“自動(dòng)完成”功能,將按照下列方式處理 “自動(dòng)完成”表:
? 如果指定的“自動(dòng)完成”表不存在,系統(tǒng)將自動(dòng)建立,存在則自動(dòng)打開表。
? 缺省情況下,如果沒有指定目錄,VFP使用HOME(7)位置存儲“自動(dòng)完成”表。如果要控制用于所有程序的全局設(shè)置,可以使用新增的_SCREEN.AutoCompSource屬性指定一個(gè)表。注意:Textbox.AutoCompSource屬性會(huì)優(yōu)先執(zhí)行。
? 如果Textbox.AutoCompSource屬性不為空,將為“自動(dòng)完成”使用該屬性指定的表(如果不存在則自動(dòng)建立);如果Textbox.AutoCompSource屬性為空,則檢測_SCREEN.AutoCompSource屬性并作為源表;如果Textbox和_SCREEN的AutoCompSource屬性都為空,則使用默認(rèn)的HOME(7)位置和Autocomp.DBF表。
? 在運(yùn)行時(shí),可以動(dòng)態(tài)改變AutoCompSource屬性。
? 每次激活/禁止“自動(dòng)完成”菜單,將打開/關(guān)閉“自動(dòng)完成”表一次,了解這一點(diǎn)是十分重要的,因?yàn)檫@可以讓你知道在如KeyPress等事件中如何書寫代碼來訪問“自動(dòng)完成”表。
? “自動(dòng)完成”表以共享模式打開,這允許其他用戶也可以以共享模式打開該表。
? 如果指定的表存在,但是不能打開,文本框?qū)⒉恢С肿詣?dòng)完成功能,并且不產(chǎn)生錯(cuò)誤。
? 每當(dāng)一個(gè)新“自動(dòng)完成”表被創(chuàng)建,也將創(chuàng)建相應(yīng)的索引來提高數(shù)據(jù)訪問性能,索引標(biāo)識基于下列表達(dá)式:
SOURCE+UPPER(LEFT(DATA,30))+PADL(COUNT,8)

AutoCompTable屬性

指定“自動(dòng)完成”表的名稱和位置,存儲用于文本框的數(shù)據(jù)。
語法:
Textbox.AutoCompTable [ = String Value]
屬性詳述:
在設(shè)計(jì)和運(yùn)行時(shí)可讀寫。
應(yīng)用于:Textbox, _SCREEN
說明: 為“自動(dòng)完成”數(shù)據(jù)指定源表名稱。
注釋:
? 如果沒有指定位置和名稱,則默認(rèn)位置和名稱是:HOME(7) + “Autocomp.DBF”。
? 參考上面“AutoComp表”部分的表規(guī)則和操作觸發(fā)方式。
示例:
AddressForm.Text1.AutoCompTable = 'c:\myApp\AutoComp.DBF'
AutoCompSource屬性
指定用于在“自動(dòng)完成“表中查找數(shù)據(jù)的源表名稱。
語法:
Textbox. AutoCompSource [ = String Value]
屬性詳述:
在設(shè)計(jì)和運(yùn)行時(shí)可讀寫。
應(yīng)用于:Textbox
說明: 指定源表名稱,用于查找“自動(dòng)完成“數(shù)據(jù)。
注釋:
? 當(dāng)詞條在“自動(dòng)完成”表中被創(chuàng)建或訪問時(shí),將使用一個(gè)主鍵(保存在Source字段中)。缺省情況下,如果該屬性沒有指定表,則使用文本框的名稱(如Text1)作為主鍵。
? 通過使用該屬性,可以在應(yīng)用程序中共享這些“自動(dòng)完成”列表信息。例如:可能許多表單中都有一個(gè)Address字段,通過為每個(gè)顯示Address字段的文本框設(shè)置AutoCompSource屬性到類似myAddress的表,這樣你的整個(gè)程序就可以重復(fù)使用這些相同的“自動(dòng)完成”詞條。
示例:
AddressForm.AddressText1.AutoCompSource = 'myAddress'
AutoComplete屬性
該屬性指定是否在文本框中使用“自動(dòng)完成”功能和“自動(dòng)完成”的模式。使用“自動(dòng)完成”功能時(shí),根據(jù)輸入的詞條,將顯示一個(gè)與之匹配的最近輸入的詞條列表,如果選擇了其中的一個(gè)詞條,將使用該詞條自動(dòng)填充文本框內(nèi)容,這很類似IntelliSense。
語法:
Textbox.AutoComplete [ = Value]
字段名稱字段類型說明
Source C (20) 自動(dòng)完成控件的源名稱
Data C (254) 在控件中顯示的數(shù)據(jù)
Count I 項(xiàng)目被選擇的次數(shù)
Weight I 這是用于用戶自定義的字段
Created T 日期時(shí)間字段,是第一次建立時(shí)的唯一時(shí)間戳
UpdatedT 日期時(shí)間字段,是最近更新時(shí)的唯一時(shí)間戳
User M 用戶字段
屬性詳述:
在設(shè)計(jì)和運(yùn)行時(shí)可讀寫。
應(yīng)用于:Textbox
說明: 指定自動(dòng)完成的模式。
注釋:
? 值1用于指定按字母順序排序,不區(qū)分大小寫。
? 值2指定按最常使用排序,VFP首先基于Count字段,然后基于Updated字段顯示“自動(dòng)完成”詞條。.
? 值3指定按最近使用排序,VFP基于Updated 字段顯示“自動(dòng)完成”詞條。
? 值4是按用戶指定的順序排序。在AutoComp表中包含一個(gè)特定的Weight字段,所以用戶可以按照自己的算法來指定如何顯示列表排序。如果有約束,則使用Updated字段排序(按最近使用排序)。
? 出現(xiàn)在“自動(dòng)完成”下拉列表中的項(xiàng)目數(shù)目受Options對話框View選項(xiàng)卡中的List Display Count(列表顯示數(shù)目)設(shè)置控制。

示例

下面的示例程序在表單中建立了兩個(gè)Textbox對象,其中Text1沒有指定“自動(dòng)完成”表的位置和名稱,所以將默認(rèn)使用HOME(7)下的AutoComp.DBF表來存儲數(shù)據(jù),而Text2指定了tblAddress作為“自動(dòng)完成”表名稱,由于該表并不存在,在運(yùn)行該程序時(shí),會(huì)在當(dāng)前目錄下自動(dòng)創(chuàng)建該表。
      PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show
RETURN

DEFINE CLASS form1 AS form
    Top = 0
    Left = 0
    Height = 150
    Width = 352
    Caption = "Form1"
    Name = "form1"

    ADD OBJECT text1 AS textbox WITH ;    &&未指定“自動(dòng)完成”表的位置和名稱
        Height = 22, ;
        Left = 66, ;
        Top = 36, ;
        Width = 111, ;
        AutoComplete = 1, ;
        Name = "Text1"

    ADD OBJECT text2 AS textbox WITH ;    &&指定了“自動(dòng)完成”表,該表將保存在當(dāng)前目錄下
        Height = 22, ;
        Left = 66, ;
        Top = 75, ;
        Width = 198, ;
        AutoComplete = 1, ;
        AutoCompSource = "", ;
        AutoCompTable = "tblAddress", ;
        Name = "Text2"

    ADD OBJECT label1 AS label WITH ;
        Caption = "姓名:", ;
        Height = 17, ;
        Left = 21, ;
        Top = 36, ;
        Width = 40, ;
        Name = "Label1"

    ADD OBJECT label2 AS label WITH ;
        Caption = "地址:", ;
        Height = 17, ;
        Left = 21, ;
        Top = 75, ;
        Width = 40, ;
        Name = "Label2"
ENDDEFINE

    
執(zhí)行上面的代碼,在表單的文本框中輸入詞條,效果如圖2所示。
圖2 “自動(dòng)完成”運(yùn)行效果
這時(shí),可以使用USE命令打開tblAddress表查看一下其中的內(nèi)容,如圖3所示。其中,TEXT2是文本框的對象名稱;第5條記錄(山東煙臺)的Count字段值為2,表示被選擇了2次;第3條記錄被添加了刪除標(biāo)記,是在下拉列表中選中項(xiàng)目后按下Delete鍵后的結(jié)果。
圖3 tblAddress表中保存的內(nèi)容

Textbox 的自動(dòng)完成(Auto Completion)功能


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲高清中文字幕 | 99热只有这里有精品 | 久久久久免费 | 综合色区 | 在线观看国产一区二三区 | 国产美女网址 | 亚洲va国产日韩欧美精品色婷婷 | 免费超级淫片日本高清视频 | 亚洲成人18 | 免费观看一级特黄欧美大片 | 免费观看日本高清a毛片 | 蜜桃久久久久久久久久久 | 男女很黄很色床视频网站免 | 欧美中文字幕一二三四区 | 欧美一级暴毛片 | 久久精品国产一区二区 | 羞羞色院91 | 欧美乱人免费视频观看 | 亚洲精品欧美日韩 | 精品免费在线视频 | 亚洲色五月 | 老湿机午夜影院 | 婷婷开心激情 | 国产萝控精品福利视频免费 | 9999人体做爰大胆视频 | 男女免费视频 | 成人小视频在线观看 | 亚洲国产精品欧美日韩一区二区 | 日韩免费福利视频 | 天天做天天爱天天爽综合网 | 亚洲欧洲一区二区三区久久 | 秒播影视 午夜福利毛片 | 亚洲伊人久久综合影院2021 | 波多野结衣久久高清免费 | 午夜免费体验区 | 一级免费大片 | 成人短视频在线观看视频 | 国产成人一区二区三区免费观看 | 欧美日本高清视频在线观看 | 在线国产网站 | 亚洲精品久久久久中文字幕一区 |