2016-10-03 1437 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

相关问题