2016-10-03 128 views
0

我是VB新手,我試圖用計算器計算出售門票的數量。我需要在dblAdultTicketsSold和dblChildTicketsSold中放置小數點。我現在有限制,不會允許負數,只會允許數字。我感謝任何幫助。如何在VB中保留文本框輸入中的小數

私人小組的button1_Click(發送者爲對象,例如作爲EventArgs的)把手btnCalculate.Click

''Declare local variables 
    Dim decAdultPricePerTicket As Decimal 
    Dim dblAdultTicketsSold As Double 
    Dim decGrossAdultSalesTotal As Decimal 
    Dim decChildPricePerTicket As Decimal 
    Dim dblChildTicketsSold As Double 
    Dim decGrossChildSalesTotal As Decimal 
    Dim decGrossSalesTotal As Decimal 
    Dim decNetAdultSalesTotal As Decimal 
    Dim decNetChildSalesTotal As Decimal 
    Dim decNetTotalSales As Decimal 




    'Put backcolor back to white after it turns yellow 
    txtAdultPricePerTicket.BackColor = Color.White 
    txtAdultTicketsSold.BackColor = Color.White 
    txtChildPricePerTicket.BackColor = Color.White 
    txtChildTicketsSold.BackColor = Color.White 


    ' Validate Inputs 

    Try 

     'Validate Adult Price Per Ticket is positive numeric 
     If IsNumeric(txtAdultPricePerTicket.Text) Then 
      decAdultPricePerTicket = CDec(txtAdultPricePerTicket.Text) 
     Else 
      MessageBox.Show("Please enter a positive numeric value for Price per Adult Ticket.") 
      txtAdultPricePerTicket.Focus() 
      txtAdultPricePerTicket.BackColor = Color.Yellow 
      Exit Sub 
     End If 

     If decAdultPricePerTicket < 1 Then 
      MessageBox.Show("Please enter a positive numeric value for Price per Adult Ticket.") 
      txtAdultPricePerTicket.Focus() 
      txtAdultPricePerTicket.BackColor = Color.Yellow 
      Exit Sub 
     End If 

     'Validate amount of Adult tickets with positive numeric 
     If IsNumeric(txtAdultTicketsSold.Text) Then 
      dblAdultTicketsSold = CDbl(txtAdultTicketsSold.Text) 
     Else 
      MessageBox.Show("Please enter a positive numeric value for amount for Adult Tickets Sold.") 
      txtAdultTicketsSold.Focus() 
      txtAdultTicketsSold.BackColor = Color.Yellow 
      Exit Sub 
     End If 

     If dblAdultTicketsSold < 1 Then 
      MessageBox.Show("Please enter a positive numeric value for amount for Adult Tickets Sold.") 
      txtAdultTicketsSold.Focus() 
      txtAdultTicketsSold.BackColor = Color.Yellow 
      Exit Sub 
     End If 


     'Validate Child Price per Tickets is a positive numeric 

     If IsNumeric(txtChildPricePerTicket.Text) Then 
      decChildPricePerTicket = CDec(txtChildPricePerTicket.Text) 
     Else 
      MessageBox.Show("Please enter a positive numeric value for Price per Child Ticket.") 
      txtChildPricePerTicket.Focus() 
      txtChildPricePerTicket.BackColor = Color.Yellow 
      Exit Sub 
     End If 

     If decChildPricePerTicket < 1 Then 
      MessageBox.Show("Please enter a positive numeric value for Price per Child Ticket.") 
      txtChildPricePerTicket.Focus() 
      txtChildPricePerTicket.BackColor = Color.Yellow 
      Exit Sub 
     End If 


     'Validate amount of child tickets with positive numeric 

     If IsNumeric(txtChildTicketsSold.Text) Then 
      dblChildTicketsSold = CDbl(txtChildTicketsSold.Text) 
     Else 
      MessageBox.Show("Please enter a positive numeric value for amount of Child Tickets.") 
      txtChildTicketsSold.Focus() 
      txtChildTicketsSold.BackColor = Color.Yellow 
      Exit Sub 
     End If 

     If dblChildTicketsSold < 0 Then 
      MessageBox.Show("Please enter a positive numeric value for amount of Child Tickets.") 
      txtChildTicketsSold.Focus() 
      txtChildTicketsSold.BackColor = Color.Yellow 
      Exit Sub 
     End If 






     'Calculate and display GrossAdultSalesTotal 

     decGrossAdultSalesTotal = CDec(CDec(txtAdultPricePerTicket.Text) * CDbl(txtAdultTicketsSold.Text)) 
     lblGrossAdultSalesTotal.Text = decGrossAdultSalesTotal.ToString("c") 

     'Calculate and display GrossChildSalesTotal 
     decGrossChildSalesTotal = CDec(CDec(txtChildPricePerTicket.Text) * CDbl(txtChildTicketsSold.Text)) 
     lblGrossChildSalesTotal.Text = decGrossChildSalesTotal.ToString("c") 

     'Calculate total gross sales 
     decGrossSalesTotal = decGrossAdultSalesTotal + decGrossChildSalesTotal 
     lblGrossTotalSales.Text = decGrossSalesTotal.ToString("c") 

     'Calculate Net adult ticket sales 20% 
     decNetAdultSalesTotal = CDec(0.2 * decGrossAdultSalesTotal) 
     lblNetAdultSalesTotal.Text = decNetAdultSalesTotal.ToString("c") 

     'Calculate Net child ticket sales 20% 
     decNetChildSalesTotal = CDec(0.2 * decGrossChildSalesTotal) 
     lblNetChildSalesTotal.Text = decNetChildSalesTotal.ToString("c") 

     'Calculate Net total of adult and child tickets 
     decNetTotalSales = decNetChildSalesTotal + decNetAdultSalesTotal 
     lblNetTotalSales.Text = decNetTotalSales.ToString("c") 

    Catch 
     'Error Message 
     MessageBox.Show("All inputs must be valid positive numeric values") 
    End Try 


End Sub 
+0

這是一個Winforms應用程序還是? – Steve

+1

可能更容易使用NumericUpDown – Plutonix

+0

我想你已經完成了驗證。它工作嗎? –

回答

1

如果您使用的NumericUpDown可以將所有這些規則添加到控制......它已經默認不允許字母字符,如果最小值設置爲零,增量爲1,那麼將禁止負數和小數。如果你決定堅持使用你的文本框,我總是喜歡在用戶輸入時限制用戶的輸入,而不是在用戶點擊「提交」按鈕或其他任何內容時顯示錯誤消息,並且你可以模仿NumericUpDown的文本過濾器像這樣:

'Imports System.Text.RegularExpressions 

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
    TextBox1.Text = Regex.Replace(TextBox1.Text, "[^0-9]", "") 
    TextBox1.Select(TextBox1.Text.Length, 0) 
End Sub 

編輯:如果您需要提醒用戶,當他們試圖進入一個十進制數,那麼你可以試試這個:

Private Sub txtAdultPricePerTicket_TextChanged(sender As Object, e As EventArgs) Handles txtAdultPricePerTicket.TextChanged 
    If txtAdultPricePerTicket.Text.Contains(".") Then 
     MessageBox.Show("You can't buy a piece of a ticket dummy") '(may want to replace message text) 
     txtAdultPricePerTicket.BackColor = Color.Yellow 
     txtAdultPricePerTicket.Focus() 
     txtAdultPricePerTicket.Select(txtAdultPricePerTicket.Text.IndexOf("."), 1) 
    End If 
End Sub 

它會顯示一個錯誤消息並突出顯示小數點,以便他們可以更改它

+0

我試過這個,它所做的是強制1.5例如是15我需要它不讓你輸入錯誤的數據。我需要它提醒用戶輸入一個有效的數字,以便他們仔細檢查輸入的值。我很欣賞這個建議,它的確行得通,我應該更詳細地解釋我需要什麼。 –

+1

哦,我誤解了......我添加了一個可能適合你的編輯 – soohoonigan

+0

這很好用。謝謝您的幫助。我從來不會想到以某種方式接近它,只是不允許輸入中的那個字符。我以爲你會有一些特殊的控制來照顧它。 –

0

使用鍵盤按下時這將覆蓋.字符。

Private Sub tbKeyPress(sender As Object, e As KeyPressEventArgs) Handles dblAdultTicketsSold.KeyPress, dblChildTicketsSold.KeyPress 
     If e.KeyChar = "." Then 
      e.Handled = True 
     End If 
    End Sub 
+0

我不確定如何將其插入到我的代碼中來嘗試。當我輸入代碼時,它在e.KeyChar和e.Handled下面顯示紅線。謝謝 –

+0

你從紅線獲得什麼錯誤? – Malcor

相關問題