Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Dicas de Programação #3

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">Nome a converter</param>

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:

Farofa disse...

Excelente Blog.
Favoritado com certezaaa
Abraçoss

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico