![]() |
VB6.0 的Command與 Textbox 新增第2問題...
我想要製作 按下Command 而Textbox 就會隨機出現英文與數字結合一串文字 共20字
那請問程式碼該如何設定 請高手回答..謝謝 第2問題 Dim pw As String pw = 77996 If Text4.Text <> pw Then Label15.Caption = "密碼錯誤!" Else Label15.Caption = "登入成功!感謝您使用本程式" End If 我利用這個 來作為程式登錄密碼的用途(設定在Command)... 在程式剛啟動時 Frame 皆為灰色無法按的狀態 但當密碼判斷正確時 Frame則恢復到可以按 這部份我完全不會...希望可以交一下 ((Frame有2個...) |
VB有個指令是RND
是幫助你取亂數 用RND取亂數後再搭配ASCII碼 48-57為數字 65-90為大寫英文 97-122為小寫英文 例如先用RND取一個亂數68 CHR(68)則會變成D |
引用:
我還不太懂 不知道能不能把我要的弄成程式碼讓我自己看看... |
引用:
你先試著去寫看看 有什麼不懂或跑不動的地方再PO出問題 |
引用:
|
RND用法可去MSDN參考
它可以產生亂數, 並限定亂數產生的範圍 程式寫作牽涉的範圍滿廣 你如果能寫出一部分來 其他人就比較清楚知道怎麼幫 否則不知道你現有的程度 想幫也幫不了 就像現在我並不清楚你什麼地方不懂 是亂數的產生? 是不知道ASCII? 按鈕不會寫? TEXTBOX不會做? 還是20個循環不會寫? 建議你寫出一部分來, 有什麼問題旁人才方便接下去與你討論 |
引用:
這是我最近在網路上找的 這是貼在 Command 的 我按下 真的有產生 但是沒有每次都20位 有時候會少一位 為啥會這樣... |
沒人知道怎改嗎?
|
第一題
PHP 語法:
MSDN Library Visual Studio 也安裝上去 會對你有很大的幫助 至於解說請自己按 F8步進了解 重點在 Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 這個公式 及範圍須落在 >=48 及 <=90 但不可 >57 及 <65 至於第二題 可以用 Frame 的 .Enabled 這個屬性做切換 Frame1.Enabled = False 時就會不可使用(包括放在Frame1上的物件) Frame1.Enabled = True 則相反 |
之所以沒有出現20位數...
是因為你在網路找上的範例有問題... Rnd 本身所取得的數為 0 ~ 1之間的數值... 例如: 0.1098735 0.2729468 0.6736467 而當你把Rnd所取得的值, 乘上100000000 (1億)時, 則取得的亂數, 會是 10987353.3215734 27294681.6312982 67364675.1947425 利用Round 取整數後, 得到的值是 10987353 27294681 67364675 再利用HEX把上面的數值轉成 16進位之後, 就有可能因為數值太小, 而會發生少一位數的情況 例如: 15 對應16進位是 F (2位數 vs 1位數) 16 對應16進位是 10 (2位數 vs 2位數) 255 對應16進位是 FF (3位數 vs 2位數) 256 對應16進位是 100 (3位數 vs 3位數) 而實際取值所得到的結果... 10987353 對應16進位是 A7A759 (8位數 vs 6位數) 27294681 對應16進位是 1A07BD9 (8位數 vs 7位數) 67364675 對應16進位是 403E743 (8位數 vs 7位數) 以上例子 加起來剛好20位數, 但實際在跑亂數時,你將會遇到3個都是7位數,或3個都是6位數, 造成你跑完的結果,介於18個~21個英文數字(不可能一直都是20個英文數字的) ============================= 更慘的是,利用HEX來取英文數字, 只能取得A,B,C,D,E,F 5種英文字而已 真的是看了就不知道要怎麼改呀............... 上網找別的例子還比較快... http://zhidao.baidu.com/question/92992772.html 這是別人寫的, 參考看看吧... |
引用:
還有我用了大大提供的程式碼 發現...還是沒有20位.... |
NewPassword(20) 可以得到 20個英文數字 + "20"
NewPassword(13) 可以得到 13個英文數字 + "13" 把倒數第2行的 NewPassword = NewPassword & len(NewPassword) 拿掉... 就ok了... ======================= len是顯示文字長度的... Len("AABB") 就是 4 Len("Kppne0931") 就是 9 |
引用:
還有mini大大提供的程式碼 用上去....還是沒有每次都20位 為啥會這樣... |
有這麼的難嗎???
'放一個函數在程式碼內... Function NewPassword(intLen) Dim tmpSTR Dim i Dim tmp Randomize For i = 1 To intLen tmp = Int(Rnd * (122 - 49) + 49) if (tmp>=58 and tmp<=64) or (tmp>=91 and tmp<=96) then i=i-1 Else tmpSTR = Chr(tmp) NewPassword = NewPassword & tmpSTR End if Next End Function '在Command1的Click裡面寫... Private Sub Command1_Click() Text3.Text = NewPassword(20) End Sub 這樣跑不出結果嗎?? |
引用:
|
引用:
你只要不取97到122之間的亂數 就不會跳出小寫英文 或是用UCASE()指令也行 (UPPER CASE) |
引用:
那請問我應該用多少為最佳...... |
函數改一下就好了...
Function NewPassword(intLen) Dim tmpSTR Dim i Dim tmp Randomize For i = 1 To intLen tmp = Int(Rnd * (122 - 49) + 49) if (tmp>=58 and tmp<=64) or (tmp>=91 and tmp<=96) then i=i-1 Else tmpSTR = Chr(tmp) NewPassword = NewPassword & tmpSTR End if Next '將亂數結果的小寫英文字轉成大寫 NewPassword = UCASE(NewPassword) End Function |
引用:
有啊~ 您不會是一個個數的吧 只要加個 Label1 再在程式碼最後加上 Label1.Caption = Len(sRnd) 每次運行 Label1都是 顯示20 啊 |
引用:
|
引用:
我想....大大可能誤會我的意思了...我要的是 按下Command 然後再Text3產生"20個英數組成的字串" 而不是顯示"20"這個數字.... |
引用:
Label1.Caption = Len(sRnd) 是為了證明 sRnd這個字串是 "20個英數" 所組成 ※Len 是得到 "字串長度" 的VB保留字 如果要顯示在Text3上: me.caption 是視窗標題 只要改成 Text3.text 就可以了 ================ 為了釐清目的,問一下 試著運行一次得到以下字串 NFHQ0PSN1AUQYU2XFP2I 以上字串不就是 "20個英數組成的字串" 嗎? (還是你另有所指...?) |
Len()指令是return一個字串中有多少位字母
Mini大做出來的Label是幫助你去"認證"亂數變出來的字串是不是長度為20個字元 不用Len()去直接顯示出長度, 你要每次一個一個下去算也是可以 只是比較浪費時間 我們以前在寫程式時 會習慣到處加一兩行CODE去顯示一些重要的參數或數據 就像Mini教你的Len()就是一樣的道理 這一行指令對你本身的PROJECT沒有幫助 但可以方便寫程式或測試程式的人很快得知一些重要的數據 這些另外加上去的CODE通常最後會拿掉, 不會讓使用者看到或用到 |
引用:
感謝大大的指引....現在剩下如何輸入密碼正確時Frame才可以使用((請參照問題2)) 這部分我完全不懂 希望大大可以指引我.... |
Frame可以預設為visible=false
這樣一開始就不會有Frame出現 如果輸入的密碼相同 if text.text=password then frame.visible=true 這樣密碼正確的話Frame就會出現 |
引用:
pw = 77996 If Text4.Text <> pw Then Label15.Caption = "密碼錯誤!" Else Label15.Caption = "登入成功!感謝您使用本程式" End If 說明一下 以上程式碼 當text4輸入77996按下Command檢測正確時Frame(有2個)內的"Check"變為可使用(程式剛啟動時為灰色不可動) 不知道上面的要不要改 以及 Frame 要輸入怎樣的程式碼 |
引用:
這一段是密碼正確時執行 所有你要的功能都加在這行之後 比如說frame.enabled=true |
引用:
|
沒看到CODE不知道你哪個部分語法有錯
我估計可能是東COPY一塊, 西COPY一塊, 湊在一起時出問題 |
引用:
|
引用:
希望這次的經驗能對你有幫助 |
引用:
![]() ![]() |
引用:
|
引用:
尤其有一份學的熱忱與非得搞定它的毅力 更是不容易 每個人都有剛開始接觸一樣新事物的經驗 希望你能繼續有興趣的研究VB 遇到問題, 請隨時發問 版上的高手真的很多 (我不是, 我的VB只懂皮毛, 而且已經很多年沒摸過) |
引用:
|
為什麼【國中一年級】,就得開始寫這個呀......:on_72:
我到大一的時候才開始寫這個..........:on_74: (難道現在的小朋友為了要贏在起跑點, 都必須這麼的拚嗎 ??) |
引用:
我是因為興趣加上無聊再加上我覺得不錯玩...程式做好 有一總成就感 就決的很爽... |
引用:
裡面有寫好的範例光碟可直接來用 當初個人的VB就是因為專題所需而買書自學的 |
引用:
|
Private Sub Command1_Click()
Dim randomString As String Dim i As Integer Dim chars As String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" ' 初始化隨機字串 randomString = "" ' 產生 20 個隨機字元 For i = 1 To 20 randomString = randomString & Mid(chars, Int(Rnd * Len(chars)) + 1, 1) Next i ' 將結果顯示在文字框中 Text1.Text = randomString End Sub |
所有時間均為台北時間。現在的時間是 03:11 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *