Note that there are some explanatory texts on larger screens.

plurals
  1. POFormat a textbox to always show $ sign
    text
    copied!<p>I need a textbox that keeps a dollar sign in it. I don't want the user to be allowed to not use it in the text box. </p> <p>Here is the code that I have that does a pretty good job. Now I just need to hard code a $ at the beginning somehow.</p> <pre><code> Private Sub txtPriceAmount_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtPriceAmount.KeyDown If (e.KeyCode &gt;= Keys.D0 And e.KeyCode &lt;= Keys.D9) OrElse (e.KeyCode &gt;= Keys.NumPad0 And e.KeyCode &lt;= Keys.NumPad9) OrElse e.KeyCode = Keys.Back Then acceptableKey = True Else acceptableKey = False End If End Sub Private Sub txtPriceAmount_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPriceAmount.KeyPress ' Check for the flag being set in the KeyDown event. If acceptableKey = False Then ' Stop the character from being entered into the control since it is non-numerical. e.Handled = True Return Else 'must be in first position If e.KeyChar = Convert.ToChar(Keys.Back) Then If strCurrency.Length &gt; 0 Then strCurrency = strCurrency.Substring(0, strCurrency.Length - 1) End If Else strCurrency = strCurrency &amp; e.KeyChar End If If strCurrency.Length = 0 Then txtPriceAmount.Text = "" ElseIf strCurrency.Length = 1 Then txtPriceAmount.Text = "0.0" &amp; strCurrency ElseIf strCurrency.Length = 2 Then txtPriceAmount.Text = "0." &amp; strCurrency ElseIf strCurrency.Length &gt; 2 Then txtPriceAmount.Text = strCurrency.Substring(0, strCurrency.Length - 2) &amp; "." &amp; strCurrency.Substring(strCurrency.Length - 2) End If txtPriceAmount.Select(txtPriceAmount.Text.Length, 0) End If e.Handled = True End Sub </code></pre> <p>Entire Code.</p> <p>Public Class frmMidtermProject</p> <pre><code>Dim strCurrency As String = "" Dim acceptableKey As Boolean = False 'Module level declarations Structure Product Dim ProductIDString As String Dim DescriptionString As String Dim QuantityInteger As Integer Dim PriceDecimal As Decimal End Structure Private NumberProductsInteger As Integer = 37 Private InventoryProduct(NumberProductsInteger) As Product Private TotalDueDecimal As Decimal 'total due for a customer 'Array to store the total sales for each product Private ProductSalesTotalDecimal(NumberProductsInteger) As Decimal Private Sub Load_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.lblTimeDate.Text = CStr(Date.Now) 'Initialize values - InventoryProduct array InventoryProduct(0).ProductIDString = "102-1091" InventoryProduct(0).DescriptionString = "2x4-92 &amp; Chr(96) 5/8 SPF STUD" InventoryProduct(1).ProductIDString = "102-1127" InventoryProduct(1).DescriptionString = "2x4-12' #2 &amp;BTR SPF CONSTR LUMB" InventoryProduct(2).ProductIDString = "102-1130" InventoryProduct(2).DescriptionString = "2x4-14' #2&amp;BTR SPF CONSTR LUMB" InventoryProduct(3).ProductIDString = "102-1143" InventoryProduct(3).DescriptionString = "2x4-16' 5/8 #2&amp;BTR SPF CONSTR LUMB" InventoryProduct(4).ProductIDString = "102-1305" InventoryProduct(4).DescriptionString = "2x4-104 5/8 SPF STUD" InventoryProduct(5).ProductIDString = "102-1758" InventoryProduct(5).DescriptionString = "2x6-8' STD/#2&amp;BTR SPF CONSTR LUMB" InventoryProduct(6).ProductIDString = "102-1774" InventoryProduct(6).DescriptionString = "2x6-12' #2&amp;BTR SPF CONSTR LUMB" InventoryProduct(7).ProductIDString = "102-1923" InventoryProduct(7).DescriptionString = "2x8-16' #2&amp;BTR SPF CONSTR LUMB" InventoryProduct(8).ProductIDString = "102-2184" InventoryProduct(8).DescriptionString = "2x12-16' #2&amp;BTR SPF CONSTR LUMB" InventoryProduct(9).ProductIDString = "106-1501" InventoryProduct(9).DescriptionString = "1-3/4x11-7/8 10' LVL" InventoryProduct(10).ProductIDString = "106-2089" InventoryProduct(10).DescriptionString = "1-3/4x11-7/8 10' LVL" InventoryProduct(11).ProductIDString = "106-2115" InventoryProduct(11).DescriptionString = "1-3/4x14 14' LVL" InventoryProduct(12).ProductIDString = "106-2144" InventoryProduct(12).DescriptionString = "1-3/4x14 18' LVL" InventoryProduct(13).ProductIDString = "106-2209" InventoryProduct(13).DescriptionString = "1-3/4x14 26' 20' LVL" InventoryProduct(14).ProductIDString = "106-6742" InventoryProduct(14).DescriptionString = "2-1/2X14-18' I Joist NI-60/PRi-60" InventoryProduct(15).ProductIDString = "106-6768" InventoryProduct(15).DescriptionString = "2-1/2X14-18' I Joist NI-60/PRi-60" InventoryProduct(16).ProductIDString = "106-6807" InventoryProduct(16).DescriptionString = "2-1/2X14-24' I Joist NI-60/PRi-60" InventoryProduct(17).ProductIDString = "106-8106" InventoryProduct(17).DescriptionString = "2-1/2X14-12' I Joist RIM BOARD" InventoryProduct(18).ProductIDString = "111-0834" InventoryProduct(18).DescriptionString = "2x4-12' AC2 TREATED AG LIFETIME WTY" InventoryProduct(19).ProductIDString = "111-0847" InventoryProduct(19).DescriptionString = "2x4-14' AC2 TREATED AG LIFETIME WTY" InventoryProduct(20).ProductIDString = "124-2728" InventoryProduct(20).DescriptionString = "7/16 (14/32)-4 XB OSB 3-WHITE STRIPES" InventoryProduct(21).ProductIDString = "124-2809" InventoryProduct(21).DescriptionString = "1/2 (16/32)-4 XB OSB 2-WHITE BLAK STRIPES" InventoryProduct(22).ProductIDString = "124-2867" InventoryProduct(22).DescriptionString = "3/4 (23/32)-4 XB OSB T&amp;G 5-WHITE STRIPES" InventoryProduct(23).ProductIDString = "131-1248" InventoryProduct(23).DescriptionString = "1/2x4'-12' GYPsum 78LBL" InventoryProduct(24).ProductIDString = "131-1256" InventoryProduct(24).DescriptionString = "1/2x4'-8' MOLD/MR 78LBL" InventoryProduct(25).ProductIDString = "131-1259" InventoryProduct(25).DescriptionString = "5/8x4'-8' MOLD/MR TYPR X 105LBL" InventoryProduct(26).ProductIDString = "131-1303" InventoryProduct(26).DescriptionString = "5/8X4-12' GYPS PC TYPE X 105LBL" InventoryProduct(27).ProductIDString = "131-2454" InventoryProduct(27).DescriptionString = "8' METAL 1-1/4 CORNERBEAD" InventoryProduct(28).ProductIDString = "131-2726" InventoryProduct(28).DescriptionString = "ALL PURPOSE PALE-BLACK 7GAL" InventoryProduct(29).ProductIDString = "131-2849" InventoryProduct(29).DescriptionString = "EZ SAND 90 18#" InventoryProduct(30).ProductIDString = "131-2881" InventoryProduct(30).DescriptionString = "SPRAY-TEXTURE MEDIUM 40#" InventoryProduct(31).ProductIDString = "131-3097" InventoryProduct(31).DescriptionString = "PROROC JOINT TAPE 250'" InventoryProduct(32).ProductIDString = "165-0372" InventoryProduct(32).DescriptionString = "M/H208 ANJ COLUMN 3INCH DIAM -8'4" InventoryProduct(33).ProductIDString = "227-1442" InventoryProduct(33).DescriptionString = "NAIL 1-1/2 JOIST HANGER 5LB GALV" InventoryProduct(34).ProductIDString = "228-3142" InventoryProduct(34).DescriptionString = "JOIST HNGR TM 2.5X14 THO54140" InventoryProduct(35).ProductIDString = "229-1202" InventoryProduct(35).DescriptionString = "NAIL 8D V.C. SINKERS 50LBL BOX" InventoryProduct(36).ProductIDString = "229-1244" InventoryProduct(36).DescriptionString = "NAIL 16D V.C. SINKERS 50LBL BOX" InventoryProduct(37).ProductIDString = "229-1303" InventoryProduct(37).DescriptionString = "NAIL 16D GALVANZED BOX 50LBL BOX" End Sub Private Sub SearchBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearchProducts.Click 'Search the ProductIDString property of the inventoryProduct 'array to see if the value of ProductIDTextBox matches an ID 'in the array 'Start variables to control the search Dim FoundBoolean As Boolean = False 'Control how long to search Dim RowInteger As Integer = 0 'Current row in the search 'Loop to do the search Do Until FoundBoolean = True Or RowInteger &gt; NumberProductsInteger 'Compare textBox to array If txtProductID.Text = InventoryProduct(RowInteger).ProductIDString Then 'found a match - display other data to the readonly textboxes cboProductIDLookup.SelectedItem = txtProductID.Text txtDescription.Text = InventoryProduct(RowInteger).DescriptionString txtQuantityAmount.Text = InventoryProduct(RowInteger).QuantityInteger.ToString txtPriceAmount.Text = InventoryProduct(RowInteger).PriceDecimal.ToString("C2") 'change variable to indicate we have a match FoundBoolean = True Else 'no match yet RowInteger += 1 End If Loop 'After the search determine if the ProductID was found If FoundBoolean = False Then 'no match was found 'Clear the textbox controls that display product information 'except for the ProductID textbox txtDescription.Clear() txtQuantityAmount.Clear() txtPriceAmount.Clear() cboProductIDLookup.SelectedIndex = -1 'Display message that the ProductID is not valid MessageBox.Show("Reenter a valid product ID.", "Invalid Identifier", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) txtProductID.Focus() txtProductID.SelectAll() End If End Sub Private Sub PurchaseToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PurchaseToolStripMenuItem.Click 'Test to determine if a product was found. If txtDescription.Text = String.Empty Then 'Cannot purchase, product was not found MessageBox.Show("You must select a valid product before purchasing.", "Cannot Purchase", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) txtProductID.Focus() txtProductID.SelectAll() Else 'Can purchase the product 'Build a string to display in the listbox control Dim ProductString As String = txtProductID.Text.PadRight(12, " ") &amp; "" &amp; txtDescription.Text.PadRight(50, " ") &amp; "" &amp; txtQuantityAmount.Text.PadRight(7, " ") &amp; "" &amp; txtPriceAmount.Text.PadLeft(9, " ") lstPurchaseItems.Items.Add(ProductString) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Accumulate the total value of this customer order 'and display it to the output textbox TotalDueDecimal += (txtPriceAmount.Text * txtQuantityAmount.Text) txtTotalDueAmount.Text = TotalDueDecimal.ToString("C2") 'TotalDueTextBox.Text = QuantityTextBox.Text * TotalDueDecimal.ToString("C2") 'Accumulate total sales by product to an array Dim IndexInteger As Integer = cboProductIDLookup.SelectedIndex ProductSalesTotalDecimal(IndexInteger) += (txtPriceAmount.Text * txtQuantityAmount.Text) 'Here you can clear the form of product info if you think 'that is a good way to do the processing cboProductIDLookup.SelectedIndex = -1 txtProductID.Clear() txtDescription.Clear() txtPriceAmount.Clear() txtQuantityAmount.Clear() txtProductID.Focus() End If End Sub Private Sub ResetToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ResetToolStripMenuItem.Click 'Clear all text box and combobox controls cboProductIDLookup.SelectedIndex = -1 txtProductID.Clear() txtDescription.Clear() txtPriceAmount.Clear() txtQuantityAmount.Clear() txtTotalDueAmount.Clear() 'Clear the list box control lstPurchaseItems.Items.Clear() 'Reset the total due module-level variable to zero TotalDueDecimal = 0 'Set the focus to the product ID text box txtProductID.Focus() End Sub Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click Dim MessageString As String = "John Burton Version 1" &amp; ControlChars.NewLine &amp; "Today's date/time: " &amp; Date.Now Dim TitleString As String = "About Version 1" MessageBox.Show(MessageString, TitleString, MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click 'Close the form Me.Close() End Sub Private Sub ProductIDComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboProductIDLookup.SelectedIndexChanged 'Test to determine if a product has been selected If cboProductIDLookup.SelectedIndex &lt;&gt; -1 Then 'Store the selectedIndex to variable Dim RowInteger As Integer = cboProductIDLookup.SelectedIndex 'Based on RowInteger, display values to TextBox controls 'from the array named inventoryProduct txtProductID.Text = InventoryProduct(RowInteger).ProductIDString txtDescription.Text = InventoryProduct(RowInteger).DescriptionString txtQuantityAmount.Text = InventoryProduct(RowInteger).QuantityInteger.ToString("N0") txtPriceAmount.Text = InventoryProduct(RowInteger).PriceDecimal.ToString("C2") End If If Not IsNumeric(txtQuantityAmount.Text) Then MsgBox("Numeric input only!", vbCritical, "Invalid Input") txtQuantityAmount.Text = "" End If End Sub Private Sub TotalSalesByProductToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TotalSalesByProductToolStripMenuItem.Click 'Display output to immediate window Dim RowInteger As Integer Dim SalesString As String = "ProductID" &amp; vbTab &amp; vbTab &amp; "Amount" &amp; vbCrLf For Each ProductItem As Product In InventoryProduct 'Build string to display SalesString &amp;= ProductItem.ProductIDString.PadLeft(8, " ") &amp; vbTab &amp; vbTab &amp; ProductSalesTotalDecimal(RowInteger).ToString("C2").PadLeft(12, " ") &amp; vbCrLf 'Increment RowInteger RowInteger += 1 Next SalesString &amp;= "" &amp; vbCrLf SalesString &amp;= "Total Due" &amp; vbTab &amp; vbTab &amp; txtTotalDueAmount.Text &amp; vbCrLf Dim Answer As String Dim MyNote As String MyNote = MessageBox.Show(SalesString, "Sales Totals, Do you want to save this File", MessageBoxButtons.OK, MessageBoxIcon.Information) MyNote = "Do you want to save the Sales Totals Summary to File?" Answer = MsgBox(MyNote, vbYesNo, "Sales Totals to File") If Answer = vbNo Then 'Code for No Responce End If If Answer = vbYes Then 'Code for Yes Responce sFile.InitialDirectory = ("C:\") sFile.FileName = ("Save As...") sFile.Filter = ("Only Text Files (*.txt)|*.txt") sFile.ShowDialog() Dim W As New IO.StreamWriter(sFile.FileName, True) ' notes from class need messgbox W.WriteLine(lblTimeDate.Text &amp; vbCrLf &amp; vbCrLf &amp; txtJobFileName.Text) W.WriteLine() W.WriteLine() W.WriteLine(SalesString) W.Close() End If End Sub Private Sub SearchToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchToolStripMenuItem.Click 'Call the Click event for theSearch button control btnSearchProducts.PerformClick() End Sub Private Sub SaveAsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveAsToolStripMenuItem.Click sFile.InitialDirectory = ("C:\") sFile.FileName = ("Save As...") sFile.Filter = ("Only Text Files (*.txt)|*.txt") sFile.ShowDialog() Dim W As New IO.StreamWriter(sFile.FileName, True) ' notes from class need messgbox W.WriteLine(lblTimeDate.Text &amp; " " &amp; txtJobFileName.Text) W.WriteLine() W.WriteLine() Dim ProductString As String = lblSkuNumper.Text.PadRight(12, " ") &amp; "" &amp; lblDescription.Text.PadLeft(27, " ") &amp; "" &amp; lblQuantityAmount.Text.PadLeft(28, " ") &amp; "" &amp; lblPriceAmount.Text.PadLeft(11, " ") W.WriteLine(ProductString) W.WriteLine() Dim i As Integer For i = 0 To lstPurchaseItems.Items.Count - 1 W.WriteLine(lstPurchaseItems.Items.Item(i)) Next W.WriteLine() W.WriteLine() Dim TotalDue As String = txtTotalDueAmount.Text.PadLeft(70, ".") W.WriteLine(vbTab &amp; vbTab &amp; vbTab &amp; vbTab &amp; vbTab &amp; vbTab &amp; "TotalDue" &amp; txtTotalDueAmount.Text.PadLeft(22, "")) W.Close() End Sub Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExitDesign.Click Me.Close() End Sub Private Sub btnResetClearItems_Click(sender As Object, e As EventArgs) Handles btnResetClearItems.Click ResetToolStripMenuItem.PerformClick() End Sub Private Sub txtQuantityAmount_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtQuantityAmount.KeyPress If (e.KeyChar &lt; "0" OrElse e.KeyChar &gt; "9") AndAlso e.KeyChar &lt;&gt; ControlChars.Back Then e.Handled = True End If ' use this to add any special characters..............e.KeyChar &lt;&gt; "." AndAlso End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnSearchDescription.Click 'Search the ProductIDString property of the inventoryProduct 'array to see if the value of ProductIDTextBox matches an ID 'in the array 'Start variables to control the search Dim FoundBoolean As Boolean = False 'Control how long to search Dim RowInteger As Integer = 0 'Current row in the search 'Loop to do the search Do Until FoundBoolean = True Or RowInteger &gt; NumberProductsInteger 'Compare textBox to array If txtDescription.Text = InventoryProduct(RowInteger).DescriptionString Then 'If txtProductID.Text = InventoryProduct(RowInteger).ProductIDString Then 'found a match - display other data to the readonly textboxes txtProductID.Text = InventoryProduct(RowInteger).ProductIDString cboProductIDLookup.SelectedItem = txtProductID.Text txtDescription.Text = InventoryProduct(RowInteger).DescriptionString txtQuantityAmount.Text = InventoryProduct(RowInteger).QuantityInteger.ToString txtPriceAmount.Text = InventoryProduct(RowInteger).PriceDecimal.ToString("C2") 'change variable to indicate we have a match FoundBoolean = True Else 'no match yet RowInteger += 1 End If Loop 'After the search determine if the ProductID was found If FoundBoolean = False Then 'no match was found 'Clear the textbox controls that display product information 'except for the ProductID textbox txtDescription.Clear() txtQuantityAmount.Clear() txtPriceAmount.Clear() cboProductIDLookup.SelectedIndex = -1 'Display message that the ProductID is not valid MessageBox.Show("Reenter a valid product ID.", "Invalid Identifier", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) txtProductID.Focus() txtProductID.SelectAll() End If End Sub Private Sub txtPriceAmount_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtPriceAmount.KeyDown If (e.KeyCode &gt;= Keys.D0 And e.KeyCode &lt;= Keys.D9) OrElse (e.KeyCode &gt;= Keys.NumPad0 And e.KeyCode &lt;= Keys.NumPad9) OrElse e.KeyCode = Keys.Back Then acceptableKey = True Else acceptableKey = False End If End Sub Private Sub txtPriceAmount_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPriceAmount.KeyPress ' Check for the flag being set in the KeyDown event. If acceptableKey = False Then ' Stop the character from being entered into the control since it is non-numerical. e.Handled = True Return Else 'must be in first position If e.KeyChar = Convert.ToChar(Keys.Back) Then If strCurrency.Length &gt; 0 Then strCurrency = strCurrency.Substring(0, strCurrency.Length - 1) End If Else strCurrency = strCurrency &amp; e.KeyChar End If If strCurrency.Length = 0 Then txtPriceAmount.Text = "" ElseIf strCurrency.Length = 1 Then txtPriceAmount.Text = "0.0" &amp; strCurrency ElseIf strCurrency.Length = 2 Then txtPriceAmount.Text = "0." &amp; strCurrency ElseIf strCurrency.Length &gt; 2 Then txtPriceAmount.Text = strCurrency.Substring(0, strCurrency.Length - 2) &amp; "." &amp; strCurrency.Substring(strCurrency.Length - 2) End If txtPriceAmount.Select(txtPriceAmount.Text.Length, 0) End If e.Handled = True End Sub Private Sub btnPurchaseItems_Click(sender As Object, e As EventArgs) Handles btnPurchaseItems.Click PurchaseToolStripMenuItem.PerformClick() End Sub </code></pre> <p>End Class</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload