Converter Texto para ProperCase
Quando se inserem registos em bases
de dados é necessário ter algum cuidado como a informação se encontra e o que se
grava. Muitos utilizadores finais, quer por falta de conhecimentos informáticos,
quer por falta de cuidado, não regista a informação correctamente sendo pois muito
usual encontrar registos (como nome próprios, moradas, etc) escritos a maiúsculas
ou sem elas.
Os exemplos de “JORGE PAULINO” ou
“jorge paulino” são por isso normais em muitos casos, e a existência de diversos
registos com diversos formatos também. A solução de alguns programadores passa por
converter tudo para maiúsculas, mas não é sem dúvida uma solução agradável.
Para prevenir isso pode-se utilizar
uma pequena função que converte o texto para o chamado
ProperCase, ou seja, a primeira letra de cada palavra a maiúsculas e as
restantes a minúsculas. Para isso usamos a instrução
StrConv() que permite efectuar a conversão para um formato definido. Como a conversão
para ProperCase converte todas as palavras na frase, e existem algumas que se devem
evitar (como é o caso de "e", "da", "do", "dos", "das" e outras variações), pode-se
usar esta função que corrige este “problema”:
'''
<summary>
'''
Converte o nome para ProperCase e coloca algumas palavras
'''
(menor ou igual a 3 caracteres) em minúsculas. Isto para evitar
''' as palavras: "e", "da", "do", "dos", "das"
e outras variações.
''' </summary>
''' <param name="str">
Private
Function ProperCase(ByVal str
As String) As
String
Try
' Separa o nome convertido(através do StrConv) para uma variável
Dim strSplit() As String = StrConv(str,
VbStrConv.ProperCase).Split(" "c)
Dim result
As String = String.Empty
' Faz um ciclo em todas as palavras encontradas
For x
As Byte = 0 To
strSplit.Length - 1
' Caso a dimenção seja igual
ou inferior a 3 converte
' para minúsculas. Caso contrário
apenas contrói o resultado
If strSplit(x).Length <= 3 Then
result
&= strSplit(x).ToLower + Space(1)
Else
result
&= strSplit(x) + Space(1)
End If
Next
' Retorna o nome convertido
Return
result
Catch ex As Exception
' Em caso de erro retorna o texto em branco
Return
String.Empty
End
Try
End Function
Depois a utilização da função, por
exemplo, no evento Click de um botão:
Private
Sub Button1_Click(ByVal sender
As System.Object, ByVal e
As System.EventArgs) Handles
Button1.Click
' Nome a converter
Dim strNomeCompleto As
String = "antonio josé
da silva oliveira"
‘ Mostra o resultado após conversão
Debug.WriteLine(ProperCase(strNomeCompleto))
End
Sub
DataGridView e ContextMenu
Na DataGridView
não é possível normalmente, e sem utilizar qualquer código, seleccionar uma célula
utilizando o botão direito do rato – o que é incomodo principalmente quando se mostrar
um menu. Ou seja o que é necessário é seleccionar a célula com o botão do lado esquerdo do rato
e depois mostrar o menu com o botão do lado direito do rato.
Como isto não é
prático nem funcional, podemos ultrapassar isto utilizando este código:
'
Executa quando algum item(ToolStripMenuItem) é seleccionado
Sub tsMenu_Click(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
' Mostra a informação com o
texto do ToolStripMenuItem
Debug.WriteLine(CType(sender,
ToolStripMenuItem).Text)
End Sub
' No evento MouseDown da DataGridView
Private
Sub DataGridView1_MouseDown(ByVal sender
As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Handles DataGridView1.MouseDown
' Verifica se o botão usado
é o direito
If
e.Button = Windows.Forms.MouseButtons.Right Then
' Verifica onde foi clicado com o ponteiro do rato
Dim hti
As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
' Caso tenha sido clicado numa célula e existam linhas
If hti.Type = DataGridViewHitTestType.Cell
And hti.RowIndex >= 0
Then
' Selecciona a célula onde
se efectuou o clique
DataGridView1.CurrentCell = DataGridView1(hti.ColumnIndex,
hti.RowIndex)
'
Caso não seja uma célula em branco (nova linha)
If Not DataGridView1.CurrentCell.Value Is System.DBNull.Value Then
' Cria um novo ContextMenuStrip (texto, separador, texto), sem imagens,
' e define que ao se clicar num item corre o Sub "tsMenu_Click"
Dim menustrip As
New ContextMenuStrip
menustrip.Items.Add("VBTuga Blog",
Nothing, AddressOf
tsMenu_Click)
menustrip.Items.Add("-")
menustrip.Items.Add(DataGridView1.CurrentCell.Value, Nothing, AddressOf
tsMenu_Click)
' Mostra o ContextMenuStrip onde foi clicado com o rato
menustrip.Show(Me.DataGridView1, New Point(e.X, e.Y))
End If
End
If
End
If
End Sub
PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!
1 comentários:
Excelente Blog.
Favoritado com certezaaa
Abraçoss
Enviar um comentário