I did search a lot about this but found nothing. So, I simply have 1 textbox, 1 label called "Invalid", 1 button, and finally a text file.
The text file has numbers in lines or more likely zip codes written in this way:
10000
23251
30021
51931
and so on...
textbox = type the zip code number
button = to search if the number which I did type in the textbox is inside the text file or not. If yes, then label1.text = "Valid"
and that's pretty much all of it.
I tried the following but I know it's totally wrong + it doesn't work + it will take so long time to type each and every single number in it.
Can someone provide a method and a code to use and apply it directly not to mention understanding it as I'm new regarding VB.NET stuff.
I tried File.ReadAllLines, was searching about some documentations but I only did find C# not VB.NET
Someone told me to used File.ReadAllLines as shown:
If linesFromFile.Any(Function(l) l = myTextBox.Text) Then
label1.Text = "Valid"
End If
Tried to apply it but no good.
Dim File As String = "Georgia.txt"
Dim Georgia As String = IO.File.ReadAllLines(File)
If Georgia.Any(Function(l) l = TextBox1.Text) Then
Label1.Text = "Valid"
End If
Here is a process to find a match. There are many ways to do this.
Create a form called frmTest add two buttons btnFind and btnLoad then a Textbox called tbFind.Also you will need a ListBox named ListBox1.
In my example I load the data into a String Array called strData.
It needs to be declared top level like this Dim strData(12) As String
Now that the data is in the String Array load the strData in to the ListBox.
Enter the value you want to find into the tbFind
Now click the btnFind.
Dim strData(12) As String
Private Sub btnLoad_Click(sender As Object, e As EventArgs) Handles btnLoad.Click
LoadLB()
End Sub
Public Sub LoadLB()
strData = {"", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"}
Dim allMo As String
For i As Integer = 1 To 12
allMo = i & " - " & strData(i)
ListBox1.Items.Add(allMo)
Next
End Sub
Private Sub btnFind_Click(sender As Object, e As EventArgs) Handles btnFind.Click
For x As Integer = 1 To 12
If tbFind.Text = strData(x) Then
MsgBox("Match " & strData(x))
End If
Next
End Sub
Related
I would like to make a simple program that does the following
Takes a text input of a string and the number of times it needs to be looped by the program user and produces that loop to output that string the number of times stated. My loop isn't doing that. (New to visual basic loops)
Kindly correct advise where i have gone wrong below:
Public Class Form1
Private Sub cmdLoop_Click(sender As Object, e As EventArgs) Handles cmdLoop.Click
Dim newput As String
Dim numberr As Integer
Dim counter As Integer
newput = txtStatement.Text
numberr = TxtRepeatNum.Text
For counter = 1 To numberr
lbloutput.Text = newput & vbCrLf
Next
End Sub
Your loop is writing numberr times the same string into the text box, with every iteration it overwrites the previous content. Change it to
lbloutput.Text = ""
For counter = 1 To numberr
lbloutput.Text = lbloutput.Text & newput & vbCrLf
Next
I've seen several similar older questions but none of them was properly answered, so I'm raising the topic again. What I need is easy: I have a list of strings composed of one or severals words each (in that case separated by ","). I want a textbox to suggest one or more of those strings when the user is typing, but taking into account not only the first word of the string, but also the others. As a silly example, if my string list is:
string 1: bike, redish
string 2: car, red
string 3: cat, brown
When the user types: "b" strings 1 and 3 should be suggested (bike and brown), when the user types "c" or "ca" strings 2 and 3 should be suggested (car and cat).
So far, I got the autocomplete property working but only for the first word (so if my user types "b" only string 1 will be suggested). This is the code:
Dim newstr As New AutoCompleteStringCollection
While dr.Read 'this is a datareader from which I get my list
newstr.Add(dr.Item(0).ToString)
End While
dr.Close()
mytextbox.AutoCompleteMode = AutoCompleteMode.SuggestAppend
mytextbox.AutoCompleteSource = AutoCompleteSource.CustomSource
mytextbox.AutoCompleteCustomSource = newstr
How can I achieve what I need? I thought it would be already implemented, but it seems not. Any help will be greatly appreciated
I do not think an autocomplete source is what you want for this.
Instead I suggest you use a ComboBox in DropDown mode.
ComboBox3.DropDownStyle = ComboBoxStyle.DropDown
You need to make the list part visible when the control gets focus...
Private Sub ComboBox3_GotFocus(sender As Object, e As EventArgs) Handles ComboBox3.GotFocus
ComboBox3.DroppedDown = True
End Sub
Then rebuild the list contents based on whenever the textbox changes.
Private Sub ComboBox3_KeyUp(sender As Object, e As EventArgs) Handles ComboBox3.KeyUp
Dim Ss = ComboBox3.SelectionStart
Dim Sl = ComboBox3.SelectionLength
.... rebuilt the list items here ...
Dim Ss = ComboBox3.SelectionStart
Dim Sl = ComboBox3.SelectionLength
ComboBox3.DroppedDown = True
End Sub
COMPLETE EXAMPLE
Public Class Form4
Dim employees() As String = New String() {"Hamilton, David", _
"Hensien, Kari", "Hammond, Maria", "Harris, Keith", _
"Henshaw, Jeff D.", "Hanson, Mark", "Harnpadoungsataya, Sariya", _
"Harrington, Mark", "Harris, Keith", "Hartwig, Doris", _
"Harui, Roger", "Hassall, Mark", "Hasselberg, Jonas", _
"Harnpadoungsataya, Sariya", "Henshaw, Jeff D.", "Henshaw, Jeff D.", _
"Hensien, Kari", "Harris, Keith", "Henshaw, Jeff D.", _
"Hensien, Kari", "Hasselberg, Jonas", "Harrington, Mark", _
"Hedlund, Magnus", "Hay, Jeff", "Heidepriem, Brandon D."}
Private Sub ComboBox3_GotFocus(sender As Object, e As EventArgs) Handles ComboBox3.GotFocus
ComboBox3.DroppedDown = True
End Sub
Private Sub ComboBox3_KeyUp(sender As Object, e As KeyEventArgs) Handles ComboBox3.KeyUp
Dim Ss = ComboBox3.SelectionStart ' + 1
ComboBox3.Items.Clear()
Dim SearchText As String = UCase(ComboBox3.Text)
For Each Str As String In employees
Dim UStr As String = UCase(Str)
If InStr(UStr, SearchText) = 1 OrElse InStr(UStr, " " & SearchText) > 0 Then
ComboBox3.Items.Add(Str)
End If
Next
ComboBox3.SelectionStart = Ss
ComboBox3.SelectionLength = 0
ComboBox3.DroppedDown = True
End Sub
End Class
MAKE SURE you set the comboboxstyle to DropDown
I have a multi-line textbox with this appearance:
A#B
C#
D#E
and I want to populate my datagridview to something like this:
_________
|A|BC|D|E|
I mean, I want to split when there's a "#" , but I don't want multi-line cells in datagridview.
I tried this code:
Dim sup() As String = TextBox1.Text.Split(vbCr, vbLf, vbTab, " "c, "#")
DataGridView1.Rows.Add(sup(0), sup(1), sup(2),sup(3))
but it says it goes outta bounds ... Thanks!
edit:
"Index out of range exception" Error.
If i paste the textbox values to microsoft word they come like this:
If you are sure you will be splitting your textbox with 3 #'s, you could use something like this after creating 3 columns in your datagridview
Dim myStr As String
Dim substring As String
Dim strArray() As String
Dim columnInt as Integer = 0
myStr = Textbox1.Text
strArray = myStr.Split("#")
For i = 0 to strArray.Length - 1
Datagridview.Rows(0).Cells(columnInt).Value = strArray(i)
columnInt += 1
next
As I am not quite sure how you want this data to appear exactly, you may also need to declare the count of your columns should it be larger than 3. Add this code before the first For Statement:
For i = 0 to strArray.Length - 1
DataGridView.Columns.Add("YourText","YourText")
Next
Untested but it should get you in the right spot!
*Edit: Updated after testing
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick
If DataGridView1.RowCount = 1 Then DataGridView1.Rows.Clear()
Call dgvstuff()
Timer1.Stop()
End Sub
Sub dgvstuff()
Dim sup2 = TextBox2.Text.Replace("#", "").Replace(">", " "c)
Dim sup() = sup2.Split(" "c, "#", vbCrLf, vbTab)
With DataGridView1
.Rows(0).Cells(0).Value = sup(1).ToString
.Rows(0).Cells(1).Value = sup(7).ToString
.Rows(0).Cells(3).Value = sup(4).ToString
End With
End Sub
I really don't know why but it works like this. Anyone knows a better/cleaner way? Tks
Hi i have a code for finding words from richtextbox and change font color, the code is working but i f i go back and edit the previous text to something that i don't want to color, the color doesn't go away. here is my code
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
Dim S As Integer = RichTextBox1.SelectionStart
Dim html() As String = {"<!DOCTYPE html>", "<html>", "</html>", "<head>", "</head>", "<body>", "</body>", "pre>", "</pre>", "<!DOCTYPE>", "<title>", "</title>", "<a>",
"<abbr>", "<address>", "<area>", "<article>", "<aside>", "<audio>", "<acronym>", "<applet>", "<b>", "<base>", "<bdi>", "<bdo>", "<blockquote>", "<body>", "<br>", "<button>", "<basefont>", "<bgsound>", "<big>", "<blink>"}
For i As Integer = 0 To html.Length - 1
Dim str As String = html(i)
Dim start As Integer = S - str.Length - 1
If (start >= 0) Then
If (RichTextBox1.Text.Substring(start, str.Length).ToLower.Equals(str)) Then
RichTextBox1.SelectionStart = start
RichTextBox1.SelectionLength = str.Length
RichTextBox1.SelectionColor = Color.Green
RichTextBox1.SelectionStart = S
RichTextBox1.SelectionLength = 0
End If
End If
Next
RichTextBox1.SelectionColor = RichTextBox1.ForeColor
End Sub
When i run the code provided by Воля Або Смерть the half of text is colored in different colors.
EDITED: if you want to extend the code to allow properties, the modification is very simple. Just check if the regualr expression match contains a space or not. If so, then look in the allowed array for the match without any regards to the properties, values, etc. Code modified, and image added.
I know you asked for solution to your approach, but I am advising another approach for what you want to accomplish.
You could easily overcome this problem if you used Regular Expression.
The idea is simple..
At the RichTextBox_TextChanged event, a regular expression match maker iterates through all text and looks for any HTML tag (one that begins with < and ends with >) regardless of the text in-between.
Then instead of looping through all valid HTML tags in your array, one simple line can easily tell if the array Contains the element or not.
Here is my (Tested & Working) Code..
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub RichTextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles RichTextBox1.TextChanged
Dim current_cursor_position As Integer = Me.RichTextBox1.SelectionStart
'This is useful to get a hold of where is the current cursor at
'this will be needed once all coloring is done, and we need to return
Dim html() As String = {"<!DOCTYPE html>", "<html>", "</html>", "<head>", "</head>",
"<body>", "</body>", "pre>", "</pre>", "<!DOCTYPE>", "<title>",
"</title>", "<a>", "<abbr>", "<address>", "<area>", "<article>",
"<aside>", "<audio>", "<acronym>", "<applet>", "<b>", "<base>",
"<bdi>", "<bdo>", "<blockquote>", "<body>", "<br>", "<button>",
"<basefont>", "<bgsound>", "<big>", "<blink>", "<img>","</img>",
"<input>","</input>"}
Dim pattern As String = "<(.)*?>"
Dim matches As MatchCollection = Regex.Matches(Me.RichTextBox1.Text, pattern)
For Each match In matches
Me.RichTextBox1.Select(match.index, match.length)
Dim lookFor As String = match.ToString
If match.ToString.Contains(" ") Then 'Checking if tag contains properties
lookFor = match.ToString.Substring(0, match.ToString.IndexOf(" ")) & ">"
'This line will strip away any extra properties, values, and will
' close up the tag to be able to look for it in the allowed array
End If
If html.Contains(lookFor.ToString.ToLower) Then
'The tag is part of the allowed tags, and can be colored green.
Me.RichTextBox1.SelectionColor = Color.Green
Else
'This tag is not recognized, and shall be colored black..
Me.RichTextBox1.SelectionColor = Color.Black
End If
Next
Me.RichTextBox1.SelectionStart = current_cursor_position
'Returning cursor to its original position
Me.RichTextBox1.SelectionLength = 0
'De-Selecting text (if it was selected)
Me.RichTextBox1.SelectionColor = Color.Black
'new text will be colored black, until
'recognized as HTML tag.
End Sub
End Class
PS: you could also avoid expanding your html array of allowed elements, by simply using a regular expression to look for valid HTML tags (with flexibility of spaces between tags, properties and values, etc.
If you wish, I could elaborate on this.
You are actually pretty close. Take the RichTextBox1.SelectionColor = RichTextBox1.ForeColor line out of the loop and you're golden.
For Each elem As String In html
Dim start As Integer = S - elem.Length - 1
If (start >= 0) Then
If (RichTextBox1.Text.Substring(start, elem.Length).ToLower.Equals(elem)) Then
RichTextBox1.SelectionStart = start
RichTextBox1.SelectionLength = elem.Length
RichTextBox1.SelectionColor = Color.Green
RichTextBox1.SelectionStart = S
RichTextBox1.SelectionLength = 0
End If
End If
Next
RichTextBox1.SelectionColor = RichTextBox1.ForeColor
Recently when creating a program for my client as part of my computing project in visual basic .net I've came across a problem, which looks like following; In order to receive additional marks for my program I must take an advantage of either Binary Search or Insertion Sort subroutine declared recursively, so far the only place I can use it on is my View form which displays all reports generated by program but the problem with this is since I'm using MS Access to store my data all of the data is downloaded and placed in listview in load part of form. So the only way I can use it is by running it on listview which is a major problem for me due to the fact that I'm not very experienced in vb.
For binary search I have tried downloading all of the items in specified by user column into an array but that's the bit I was struggling on the most because I'm unable to download all items from only one column into an array. Also instead of searching every single column user specifies in my form in which column item is located (For example "19/02/2013" In Column "Date"), In my opinion if I manage to download every single entry in specified column into an array it should allow me to run binary search later on therefore completing the algorithm. Here's what I've got so far.
Sub BinarySearch(ByVal Key As String, ByVal lowindex As String, ByVal highindex As String, ByVal temp() As String)
Dim midpoint As Integer
If lowindex > highindex Then
MsgBox("Search Failed")
Else
midpoint = (highindex + lowindex) / 2
If temp(midpoint) = Key Then
MsgBox("found at location " & midpoint)
ElseIf Key < temp(midpoint) Then
Call BinarySearch(Key, lowindex, midpoint, temp)
ElseIf Key > temp(midpoint) Then
Call BinarySearch(Key, midpoint, highindex, temp)
End If
End If
End Sub
Private Sub btnSearch_Click(sender As System.Object, e As System.EventArgs) Handles btnSearch.Click
Dim Key As String = txtSearch.Text
Dim TargetColumn As String = Me.lstOutput.Columns(cmbColumns.Text).Index
Dim lowindex As Integer = 0
Dim highindex As Integer = lstOutput.Items.Count - 1
'Somehow all of the items in Target column must be placed in temp array
Dim temp(Me.lstOutput.Items.Count - 1) As String
' BinarySearch(Key, lowindex, highindex, temp)
End Sub
For Insertion sort i don't even have a clue how to start, and the thing is that I have to use my own subroutine instead of calling system libraries which will do it for me.
Code which I have to use looks like following:
Private Sub InsertionSort()
Dim First As Integer = 1
Dim Last As Integer = Me.lstOutput.
Dim CurrentPtr, CurrentValue, Ptr As Integer
For CurrentPtr = First + 1 To Last
CurrentValue = A(CurrentPtr)
Ptr = CurrentPtr - 1
While A(Ptr) > CurrentValue And Ptr > 0
A(Ptr + 1) = A(Ptr)
Ptr -= 1
End While
A(Ptr + 1) = CurrentValue
Next
Timer1.Enabled = False
lblTime.Text = tick.ToString
End Sub
Any ideas on how to implement this code will be very appreciated, and please keep in my mind that I'm not very experienced in this language
Perhaps this might give you a place to begin. If you already have a ListView with "stuff" in it you could add a button to the form with the following code to copy the Text property for each item into an array:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myArray(Me.ListView1.Items.Count - 1) As String
Dim i As Integer
' load array
For i = 0 To Me.ListView1.Items.Count - 1
myArray(i) = Me.ListView1.Items(i).Text
Next
' show the results
Dim s As String = ""
For i = 0 To UBound(myArray)
s &= String.Format("myArray({0}): {1}", i, myArray(i)) & vbCrLf
Next
MsgBox(s, MsgBoxStyle.Information, "myArray Contents")
' now go ahead and manipulate the array as needed
' ...
End Sub