05/05/20 15:21
aragorn76
Salve a tutti,
eccomi tornato con nuovo quesito molto interessante, a cui non riesco ancora a trovare soluzione. (linguaggio VB Net)
Premesso:
ho un database mysql e una richtextbox1.. Ogni carattere che io digito nella richtextbox1, viene inserito anche nella tabella TESTO di mysql.. giustamente facendo i dovuti controlli, per evitare che caratteri non validi, mi diano errori nel momento dell'inserimento nel DB.. perche? se ne va la luce, non ho perso nulla.. funziona? beh si..
Problema:
in questa richtextbox, qualora l'utente inserisca un Nome, vorrei trovare un modo affinchè venga riconosciuto e in tal caso, aggiungerlo nella tabella NOMI ad esempio (oltre nella tabella
TESTO che gia fa).. Ho trovato quindi il comando Like e lo vorrei usare, ma in questo modo non va:
Dim sMatch As String = RichTextBox1.Find(RichTextBox1.Text Like "\[A-Z]*")
If sMatch <> "" Then
MsgBox("il nome e: " & sMatch)
End If
\[A-Z]* questo significa che appena metto \ seguito da una lettera grande, deve sapere che è un nome.. In effetti appena scrivo
\F appare sottolineato, come che sappia che quella parola deve indicare qualcosa.. ma al comando msgbox mi appare:
il nome e: -1Come posso risolvere? tenendo conto che ci possono essere piu nomi/cognomi dentro la RichTextBox1, quindi dovrebbe fare un controllo costante.. mi servirebbe un aiutino, anche utilizzando altre tecniche, invece del LIKE. Grazie
p.s. soluzioni del tipo di creare a priori una tabella con lista nomi, non è fattibile..
Ultima modifica effettuata da aragorn76 05/05/20 15:48
aaa
06/05/20 15:38
Carlo
Mi associo a Thejuster, e non conosco l'istruzione Like.
Per fare quello che vuoi tu puoi decidere di scrivere il nome tra dei \separatori\
Prova con questo codice, ogni parola sritta tra \parola\, viene aggiunta ad una listbox.
nel form ci devono essere una RichTextBox1 e una ListBox1
Public Class Form1
Dim pos1 As Integer = 0
Dim pos2 As Integer = 0
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
If pos1 > RichTextBox1.TextLength Then pos1 = RichTextBox1.TextLength : pos2 = 0
Dim pos As Integer = RichTextBox1.Text.IndexOf("\", pos1)
If pos <> -1 Then
pos1 = pos + 2
If pos2 > 0 Then
ListBox1.Items.Add(RichTextBox1.Text.Substring(pos2, RichTextBox1.TextLength - pos2 - 2))
pos2 = 0
Else
pos2 = pos + 2
End If
End If
End Sub
End Class
dovrai gestire effetti indesiderati, per esempio se torni indietro sul testo e aggiungi/togli parole o spazi le variabili pos1 e pos2 non saranno più corrette.
Ultima modifica effettuata da Carlo 06/05/20 15:53
in programmazione tutto è permesso
07/05/20 7:52
Carlo
Postato originariamente da aragorn76:
in questo caso mi da tutti i nomi presenti nella richtextbox1.. Speriamo che non rallenti nel caso vi siano, che so, 200 parole.... adesso lo testp e se ho problemi vi farò sapere.. Graziee
con 200 parole non avrai problemi, lo stesso codice lo puoi scrivere così, per aumentarne un po' l'efficienza:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' tutte le parole separate da spazio in testArray
Dim testArray() As String = Split(RichTextBox1.Text, " ")
' controllo tutte le parole
For i As Integer = 0 To testArray.Length - 1
If testArray(i) <> "" And testArray(i) Like "\[A-Z]*" Then
'qui inserisco solo i nomi in altra tabella
MsgBox("il nome è: " & UCase(Replace(testArray(i), "\", "")))
End If
Next
End Sub
Hai anche cambiato il concetto della routine, eri partito che la cosa doveva avvenire mentre digitavi, per non perdere il lavoro se mancasse la corrente, invece ora hai inserito un button.
Grazie per avermi portato a conoscenza dell'istruzione Like.
Ultima modifica effettuata da Carlo 07/05/20 7:59
in programmazione tutto è permesso
07/05/20 13:22
Carlo
Sta alla tua fantasia e a come vuoi che l'utente operi, se vuoi persegire l'approcio che un utente scrive nella RichTextBox e quando viene digitata la combinazione "magica" (\) accade qualcosa, potresti far apparire un nuovo form di input.
Per esempio così:
inserire una RichTextBox1 e una ListBox1 su Form1
Public Class Form1
Dim pos1 As Integer = 0
Dim FormInput As New Form
Dim TextInput As New TextBox
Dim Accoda As New Button
Dim Fatto As New Button
Dim Scelta(3) As RadioButton
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
If pos1 > RichTextBox1.TextLength Then pos1 = RichTextBox1.TextLength
Dim pos As Integer = RichTextBox1.Text.IndexOf("\", pos1)
If pos <> -1 Then pos1 = pos + 2 : FormInput.Show()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' preparazione form di input
' meglio fare in progettazione complesso quanto vuoi
FormInput.Text = "Scegli il tipo di record"
FormInput.Size = New Size(300, 180)
' preparazione text su form di input
TextInput.Location = New Point(10, 10)
TextInput.Size = New Point(260, 20)
FormInput.Controls.Add(TextInput)
' preparazione button su form di input
Accoda.Text = "Accoda"
Accoda.Location = New Point(150, 80)
FormInput.Controls.Add(Accoda)
AddHandler Accoda.Click, AddressOf Accoda_OnClick ' permette di avere l'evento click
' preparazione button su form di input
Fatto.Text = "Fatto"
Fatto.Location = New Point(150, 110)
FormInput.Controls.Add(Fatto)
AddHandler Fatto.Click, AddressOf Fatto_OnClick ' permette di avere l'evento click
' preparazione radiobutton su form di input
For i = 0 To 3
Scelta(i) = New RadioButton
Scelta(i).Location = New Point(10, 24 * i + 40)
FormInput.Controls.Add(Scelta(i))
Next
Scelta(0).Checked = True
Scelta(0).Text = "Nome "
Scelta(1).Text = "Cognome "
Scelta(2).Text = "Città "
Scelta(3).Text = "Tel. "
End Sub
Private Sub Accoda_OnClick(sender As Object, e As EventArgs)
For i = 0 To 3
If Scelta(i).Checked Then
ListBox1.Items.Add(Scelta(i).Text & TextInput.Text)
RichTextBox1.Text = Replace(RichTextBox1.Text, "\", "")
RichTextBox1.Text = RichTextBox1.Text & Scelta(i).Text & TextInput.Text & " "
End If
Next
End Sub
Private Sub Fatto_OnClick(sender As Object, e As EventArgs)
FormInput.Hide()
RichTextBox1.Text = Replace(RichTextBox1.Text, "\", "")
End Sub
End Class
Per renderlo funzionale ai tuoi scopi ci devi mettere del tuo.
Ultima modifica effettuata da Carlo 07/05/20 13:39
in programmazione tutto è permesso