PDA

View Full Version : hỏi 1 số vấn đề đơn giản về VB



eckdb
30-09-2006, 11:16
Option Explicit
Dim a As Integer
Dim b As Integer
Dim c As Integer

Sub gptb2()
Dim x, x1, x2 As Double
Dim delta As Long
If a = 0 Then
If b = 0 Then
If c = 0 Then
txtketqua.Text = "Phöông trình coù voâ soá nghieäm"
Else
txtketqua.Text = "Phöông trình voâ nghieäm"
End If
Else
x = -c / b
txtketqua.Text = "Phöông trình coù nghieäm:" & vbCrLf & "x= " & x
End If
Else
delta = b * b - 4 * a * c
If delta < 0 Then
txtketqua.Text = "Phöông trình voâ nghieäm"
End If
If delta = 0 Then
x1 = x2
x1 = -b / 2 * a
txtketqua.Text = "Phöông trình coù nghieäm keùp:" & vbCrLf & "x1= x2= " & x1
End If
If delta > 0 Then
x1 = (-b + Sqr(delta)) / (2 * a)
x2 = (-b - Sqr(delta)) / (2 * a)
txtketqua.Text = "Phöông trình coù 2 nghieäm phaân bieät: " & vbCrLf & "x1 = " & x1 & " ; x2= " & x2
End If
End If
End Sub

Private Sub cmd1_Click()
gptb2
End Sub
Private Sub cmd2_Click()
Unload Me
End Sub

Private Sub txta_Change()
Dim oldstr As String
If Not IsNumeric(txta.Text) Then
txta.Text = oldstr
Else
oldstr = txta.Text
End If
txta.MaxLength = 2
a = Val(txta)
End Sub
Private Sub txtb_Change()
Dim oldstr As String
If Not IsNumeric(txtb.Text) Then
txtb.Text = oldstr
Else
oldstr = txtb.Text
End If
txtb.MaxLength = 2
b = Val(txtb)
End Sub
Private Sub txtc_Change()
Dim oldstr As String
If Not IsNumeric(txtc.Text) Then
txtc.Text = oldstr
Else
oldstr = txtc.Text
End If
txtc.MaxLength = 2
c = Val(txtc)
End Sub

Private Sub txta_GotFocus()
txta.SelStart = 0
txta.SelLength = Len(txta.Text)
End Sub
Private Sub txtb_GotFocus()
txtb.SelStart = 0
txtb.SelLength = Len(txtb.Text)
End Sub
Private Sub txtc_GotFocus()
txtc.SelStart = 0
txtc.SelLength = Len(txtc.Text)
End Sub


ở trên là code của tôi trong 1 chương trình VB nhưng nó bị:
1) nhập a, b, c mà lớn quá như mỗi cái = 99 là máy bó tay => làm sao cho tính được số lớn hơn ?
2) nếu kết quả là 1 số thập phân dài thòng lòng thì làm sao để giới hạn số kí tự của kết quả ?
3) nếu bạn nhập vào các ô a, b hay c 1 số rồi nhập vào 1 kí tự không phải số thì nó mất luôn số ban đầu đã nhập => vậy làm sao để khi ta nhập 1 kí tự không phải là số thì nó chỉ không cho nhập thôi chứ không làm mất số ban đầu đã nhập ?
có người chỉ tôi dùng cái API gì đó
như vầy nè:

Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = (-16)
Private Declare Function GetWindowLong Lib ''user32'' Alias ''GetWindowLongA'' (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib ''user32'' Alias ''SetWindowLongA'' (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long



Private Sub Form_Load()
Dim tmp As Long
tmp = SetWindowLong(Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
End Sub

nhưng tôi không thể làm được. Ai chỉ tôi với

các bạn có thể tham khảo thêm ở file đính kèm (có 4 k hà, down về xem 1 tí ha :D )
http://www.zshare.net/download/botay-rar.html

thanks

mavabi
07-11-2006, 20:27
1) Dim delta as double 'not Long
2) 'có thể dùng tạm như thế này:
Private Sub txta_Change()
Dim oldstr As String
oldstr = Trim(txta.Text)

If Not IsNumeric(oldstr) Then

If Len(oldstr) = 1 Then
txta.Text = ""
End If
If Len(oldstr) = 2 Then

txta.Text = Left(oldstr, 1)
End If

Fun!

End If
txta.MaxLength = 2
a = Val(txta)
End Sub

mavabi
07-11-2006, 20:29
Quyên, để định dạng số dùng hàm Format
CD: Format(5435.54,"0000.000") = 5435.540 'tùy theo kiểu định dạng