2016-10-03 25 views
0

私はVBには新しく、売り出し枚数を計算するための電卓を作ろうとしています。私はdblAdultTicketsSoldとdblChildTicketsSoldに10進数を入れることができない場所にする必要があります。私は今では負の数を許さず、数値しか許さないという制限があります。私はどんな助けにも感謝します。VBのテキストボックス入力から小数点以下を保持する方法

ます。Private SubのButton1 Click(オブジェクトとして送信者、EventArgsのようe)は、キーボードを使用して押したとき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

関連する問題