史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   VB6.0 的Command與 Textbox 新增第2問題... (http://forum.slime.com.tw/thread247666.html)

kppne0931 2009-05-11 11:07 PM

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個...)

Living 2009-05-12 04:33 AM

VB有個指令是RND
是幫助你取亂數

用RND取亂數後再搭配ASCII碼
48-57為數字
65-90為大寫英文
97-122為小寫英文

例如先用RND取一個亂數68
CHR(68)則會變成D

kppne0931 2009-05-12 06:19 AM

引用:

作者: Living (文章 2153620)
VB有個指令是RND
是幫助你取亂數

用RND取亂數後再搭配ASCII碼
48-57為數字
65-90為大寫英文
97-122為小寫英文

例如先用RND取一個亂數68
CHR(68)則會變成D


我還不太懂 不知道能不能把我要的弄成程式碼讓我自己看看...

Living 2009-05-12 07:29 AM

引用:

作者: kppne0931 (文章 2153625)
我還不太懂 不知道能不能把我要的弄成程式碼讓我自己看看...

如果是功課, 告訴你原理應該對你是比較有幫助的

你先試著去寫看看
有什麼不懂或跑不動的地方再PO出問題

kppne0931 2009-05-12 05:03 PM

引用:

作者: Living (文章 2153629)
如果是功課, 告訴你原理應該對你是比較有幫助的

你先試著去寫看看
有什麼不懂或跑不動的地方再PO出問題

這不是功課 我是因為不會這類的東西 想說有沒有範例 所以才問的

Living 2009-05-12 11:17 PM

RND用法可去MSDN參考
它可以產生亂數, 並限定亂數產生的範圍

程式寫作牽涉的範圍滿廣

你如果能寫出一部分來
其他人就比較清楚知道怎麼幫

否則不知道你現有的程度
想幫也幫不了

就像現在我並不清楚你什麼地方不懂
是亂數的產生? 是不知道ASCII? 按鈕不會寫? TEXTBOX不會做? 還是20個循環不會寫?

建議你寫出一部分來, 有什麼問題旁人才方便接下去與你討論

kppne0931 2009-05-19 07:37 PM

引用:

作者: Living (文章 2153923)
RND用法可去MSDN參考
它可以產生亂數, 並限定亂數產生的範圍

程式寫作牽涉的範圍滿廣

你如果能寫出一部分來
其他人就比較清楚知道怎麼幫

否則不知道你現有的程度
想幫也幫不了

就像現在我並不清楚你什麼地方不懂
是亂數的產生? 是不知道ASCII? 按鈕不會寫? TEXTBOX不會做? 還是20個循環不會寫?

建議你寫出一部分來, 有什麼問題旁人才方便接下去與你討論

Text3.Text = Hex(Round(Rnd * 100000000 - 0, 0)) & Hex(Round(Rnd * 100000000 - 0)) & Hex(Round(Rnd * 10000000 - 0, 0))



這是我最近在網路上找的 這是貼在 Command 的 我按下 真的有產生 但是沒有每次都20位 有時候會少一位 為啥會這樣...

kppne0931 2009-05-19 10:40 PM

沒人知道怎改嗎?

mini 2009-05-20 02:40 PM

第一題

PHP 語法:

Private Sub Command1_Click()
Dim sRnd As String
Dim iupperbound 
As Integer
Dim ilowerbound 
As Integer
Dim i 
As IntegerAs Integer

    lowerbound 
Asc("0"'48
    '
upperbound Asc("9"'57
    
    '
lowerbound Asc("A"'65
    upperbound = Asc("Z") '
90
    
    
For 1 To 20
        
Do
            
Int((upperbound lowerbound 1) * Rnd lowerbound)
        
Loop While 57 And 65
        sRnd 
sRnd Chr(j)
    
Next
    Me
.Caption sRnd    

End Sub 

如果你裝 VB時能把
MSDN Library Visual Studio 也安裝上去
會對你有很大的幫助

至於解說請自己按 F8步進了解
重點在
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
這個公式
及範圍須落在 >=48 及 <=90
但不可 >57 及 <65


至於第二題
可以用 Frame 的 .Enabled 這個屬性做切換
Frame1.Enabled = False 時就會不可使用(包括放在Frame1上的物件)
Frame1.Enabled = True 則相反

cwvdavid 2009-05-20 03:50 PM

之所以沒有出現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
這是別人寫的, 參考看看吧...

kppne0931 2009-05-20 06:27 PM

引用:

作者: mini (文章 2156349)
第一題

PHP 語法:

Private Sub Command1_Click()
Dim sRnd As String
Dim iupperbound 
As Integer
Dim ilowerbound 
As Integer
Dim i 
As IntegerAs Integer

    lowerbound 
Asc("0"'48
    '
upperbound Asc("9"'57
    
    '
lowerbound Asc("A"'65
    upperbound = Asc("Z") '
90
    
    
For 1 To 20
        
Do
            
Int((upperbound lowerbound 1) * Rnd lowerbound)
        
Loop While 57 And 65
        sRnd 
sRnd Chr(j)
    
Next
    Me
.Caption sRnd    

End Sub 

如果你裝 VB時能把
MSDN Library Visual Studio 也安裝上去
會對你有很大的幫助

至於解說請自己按 F8步進了解
重點在
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
這個公式
及範圍須落在 >=48 及 <=90
但不可 >57 及 <65


至於第二題
可以用 Frame 的 .Enabled 這個屬性做切換
Frame1.Enabled = False 時就會不可使用(包括放在Frame1上的物件)
Frame1.Enabled = True 則相反

我朋友說LEN可以用 但是我不知道啥事LEN 有人可以交我一下嗎?

還有我用了大大提供的程式碼 發現...還是沒有20位....

cwvdavid 2009-05-20 08:53 PM

NewPassword(20) 可以得到 20個英文數字 + "20"
NewPassword(13) 可以得到 13個英文數字 + "13"

把倒數第2行的
NewPassword = NewPassword & len(NewPassword)
拿掉...

就ok了...

=======================

len是顯示文字長度的...

Len("AABB") 就是 4
Len("Kppne0931") 就是 9

kppne0931 2009-05-20 10:35 PM

引用:

作者: cwvdavid (文章 2156460)
NewPassword(20) 可以得到 20個英文數字 + "20"
NewPassword(13) 可以得到 13個英文數字 + "13"

把倒數第2行的
NewPassword = NewPassword & len(NewPassword)
拿掉...

就ok了...

=======================

len是顯示文字長度的...

Len("AABB") 就是 4
Len("Kppne0931") 就是 9

我是要設定在Command上 按下去之後Text就顯示20位隨機英數組成的字串 但是....好像無法設定上去.....

還有mini大大提供的程式碼 用上去....還是沒有每次都20位 為啥會這樣...

cwvdavid 2009-05-20 10:53 PM

有這麼的難嗎???

'放一個函數在程式碼內...
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


這樣跑不出結果嗎??

kppne0931 2009-05-21 06:20 AM

引用:

作者: cwvdavid (文章 2156540)
有這麼的難嗎???

'放一個函數在程式碼內...
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


這樣跑不出結果嗎??

快好了 剩最後問題. ..友些會有些便成英文小寫顯示 不能全部改大寫嗎?


所有時間均為台北時間。現在的時間是 07:05 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1