有一個問題請大家幫忙一下...
就是VB的問題
題目說:
設計一個textbox來輸入產品數量
若詩入為非數值資料
會出現輸入錯誤的訊息交談窗
這個程式怎麼寫??
2006-07-17 10:28:53 · 3 個解答 · 發問者 Anonymous in 電腦與網際網路 ➔ 程式設計
TO RODY~
我們沒有教那麼難耶
你寫的我都看不懂...
2006-07-17 11:07:16 · update #1
to rody
看不懂耶
我才高中 沒學那麼難
2006-07-17 14:03:34 · update #2
很簡單,TextBox 會有 KeyPress 事件,這個事件會傳入一個 KeyAscii As Integer,接下來你就自行處理讀進來的字就可以了,例如以下的程式碼: Select Case KeyAscii Case Asc("0") To Asc("9") Dim DotPos As Long DotPos = InStr(TxtIn.Text, ".") '有小數點 If DotPos Then '插入點位於小數點之後 If TxtIn.SelStart >= DotPos Then '小數位數超過 If (Len(TxtIn.Text) - DotPos) > (m_DecDigit - 1) And TxtIn.SelLength = 0 Then KeyAscii = 0 End If End If Case vbKeyBack 'nothing Case Asc(".") If m_DecDigit > 0 Then If InStr(TxtIn.Text, ".") Then KeyAscii = 0 Else KeyAscii = 0 End If Case Asc("-") If TxtIn.SelStart <> 0 Then KeyAscii = 0 If Left(TxtIn.Text, 1) = "-" Then KeyAscii = 0 Case Else KeyAscii = 0 End Select If Left(TxtIn.Text, 1) = "-" And TxtIn.SelStart = 0 And TxtIn.SelLength = 0 Then KeyAscii = 0If KeyAscii = 0 Then MsgBox "輸入按鍵不正確"這裡假設輸入的 TextBox 名稱叫做 TxtIn,將傳入的 KeyAscii 進行處理,如果設定 KeyAscii = 0 的話,會讓按鍵的效果消失,也就是畫面上會看不到按下去那個字另一個處理方法則是等到輸入完畢時,再來逐字檢查,也可以達到相同效果
2006-07-17 18:01:41 補充:
那... W.J.S. 寫的你看得懂嗎?看得懂我就不解釋我的了
2006-07-18 12:21:25 補充:
嗯... 都看不懂嗎,不然我稍微解釋一下好了首先,你希望『輸入非數值資料』時出現錯誤訊息,那麼就要在使用者在你的文字框打字時,進行處理,才能再使用者打『錯』字時即時反應。在這裡,大家都使用同一個事件,也就是KeyPress,因為這事件會傳入使用者到底打了什麼字。KeyPress函式產生方法就是1.直接照W.J.S.的方法打。
2006-07-18 12:22:21 補充:
2.在表單的程式碼中,左上方有個『物件』的下拉選單,可以選擇你想要產生事件的物件,你先選擇你要的文字框的名稱,點下去同時,如果你已經有這文字框的事件程式,游標會跳到這事件程式去,如果沒有就會產生一個。這時候右上角的『程序』下拉選單,你就可以選『KeyPress』了,選了之後就會產生這個物件-事件的對應程式碼,你只需要把你要的內容加進去就可以
2006-07-18 12:29:27 補充:
有了KeyPress事件的處理函式之後,接下來就是處理的實做。我的方法是,讀進來的每個字元,都進行檢查,我上面貼的是我之前寫的東西,裡面還加上小數點後位數的限制﹙m_DecDigit,內容是位數,我之前忘了說明﹚,這東西可以不要,重點就是讀進來的字只有接受『"0" - "9" , "." , "-"』這幾個字,因為這幾個字是一般數字可以接受的字。
2006-07-18 12:35:23 補充:
而如果讀到其他的字,就把讀到的字清掉﹙設定KeyAscii=0就可以﹚,而且出現錯誤訊息,這就達成你的需求。其中我們輸入的每個字元都代表一個數值﹙ASCII﹚,要知道它代表哪個數值,就必須用ASC()這個函數,或者是查表﹙h19840828寫的48、57、8就是 "0", "9", "." 的查表值﹚,但我不建議這樣的寫法,因為會比較難懂﹙不直觀﹚
2006-07-18 12:40:22 補充:
W.J.S.的寫法很不錯,不過他用到事件順序的觀念,他的做法我說明一下:
首先,按鍵按下去的時候,會發生『KeyPress』事件,這時候他先用 S 紀錄原來文字內容,用 N 紀錄游標位置,但是他不攔截或變更按鍵內容,也就是使用者按下的文字一定會出現在文字框
2006-07-18 12:46:38 補充:
接下來因為文字一定會變更,所以就引發了『Change』事件﹙文字被變更所引發的事件﹚,接著他又用了IsNumeric 這個函數來判斷這文字算不算數字,﹙並且避開了負值的第一個字『-』不是數字的問題﹚,如果不是數字,那就在出現錯誤訊息之後,還原原來的文字內容及游標位置。
2006-07-18 12:50:47 補充:
總而言之,我的方法是攔截文字,如果文字不對就不顯示;W.J.S.的方法是不攔截,先顯示文字,如果資料不合預期再改回來,兩種方法都可行,但W.J.S.的程式碼比較簡潔,就看你個人喜歡哪種了。
2006-07-17 11:04:42 · answer #1 · answered by Rody 5 · 0⤊ 0⤋
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8 Then
Else
MsgBox "Input Error", , ""
Text1.Text = ""
End If
End Sub
2006-07-17 23:50:15 · answer #2 · answered by 祥 1 · 0⤊ 0⤋
Dim S As String, N As IntegerPrivate Sub Text1_Change() If Text1.Text <> "" Then If IsNumeric(Text1.Text) = False And Text1.Text <> "-" Then MsgBox "請輸入數字!!", vbCritical Text1.Text = S Text1.SelStart = N End If End IfEnd SubPrivate Sub Text1_KeyPress(KeyAscii As Integer) S = Text1.Text N = Text1.SelStartEnd Sub
2006-07-18 12:55:55 補充:
呵呵Rody兄:真是難為您了.講的這麼的詳細Orz
2006-07-17 12:20:29 · answer #3 · answered by W.J.S. 7 · 0⤊ 0⤋