DECLARAR UMA VARI?VEL PARA TODO TIPO DE CONTROLE

MARSOLIM 13/08/2014 22:48:00
#440423
olá amigos alguem sabe como declarar uma variável para todo tipo de controle no vb.net 2008? em vba em posso fazer algo assim para tirar acentos e converter tudo em maiuscula

    Sub Letras(ctl As Control)
ctl = StrConv(ctl, 1)
ctl = Replace(ctl, [Ô]Á[Ô], [Ô]A[Ô])
ctl = Replace(ctl, [Ô]Ã[Ô], [Ô]A[Ô])
ctl = Replace(ctl, [Ô]Â[Ô], [Ô]A[Ô])
ctl = Replace(ctl, [Ô]Ä[Ô], [Ô]A[Ô])
ctl = Replace(ctl, [Ô]À[Ô], [Ô]A[Ô])
ctl = Replace(ctl, [Ô]é[Ô], [Ô]E[Ô])
...
End Sub

Call Letras(Me.nomedocontrole)


em vb.net isso não funciona bem assim. eu tenho que usar um bloco para cada tipo de controle como por exemplo

    Sub Letras(ByVal ctl As TextBox)
ctl.Text = StrConv(ctl.Text, 1)
ctl.Text = Replace(ctl.Text, [Ô]Á[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ã[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Â[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ä[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]À[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]é[Ô], [Ô]E[Ô])
End Sub

Call Letras(Me.nomedocontrole)


    Sub Letras(ByVal ctl As ComboBox)
ctl.Text = StrConv(ctl.Text, 1)
ctl.Text = Replace(ctl.Text, [Ô]Á[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ã[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Â[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ä[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]À[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]é[Ô], [Ô]E[Ô])
End Sub

Call Letras(Me.nomedocontrole)


como eu poderia fazer para uma função só com uma variavel só funcionar para vários tipos de controles como textbox e combobox?

agradeço pela atenção.
TUNUSAT 14/08/2014 09:21:24
#440428
MARSOLIM,

Não entendi bem se é isto, mas acho que seu caso é [Ô]For Each[Ô] que você procura.
Por favor, veja o link e o exemplo que coloquei:
===========================================
Instrução For Each...Next (Visual Basic)
http://msdn.microsoft.com/pt-br/library/5ebk1751.aspx
===========================================
Public Shared Sub ConfiguraCampos(ByVal Frm As Form)

Dim obj As Object

For Each obj In Frm.Controls

If (TypeOf obj Is TextBox) Or _
(TypeOf obj Is ComboBox) Or _
(TypeOf obj Is MaskedTextBox) Or _
(TypeOf obj Is RichTextBox) Then
obj.ReadOnly = True
[ô]obj.Enabled = False
[ô]obj.ForeColor = System.Drawing.Color.Red
End If

Next

End Sub

===========================================

é isto?

[][ô]s,
Tunusat.
MARSOLIM 14/08/2014 13:51:15
#440443
tunusat agradeço pela resposta mas o que acontece é que talvez nem todos os campos serão incluidos. imagine que eu tenha 20 textbox e 8 combos mas eu quero aplicar a regra só em metade deles. ficaria trabalhoso passar o nome dos controles que ficariam dentro ou fora do esquema. minha ideia era poder utilizar uma função só para todos os tipos conforme as que passei no primeiro post mas que não precisasse passar o tipo do controle. No VBA isso é possível conforme mencionei no primeiro post.

EDIÇÃO
fiz um teste mudando As Textbox e As Combobox por As Object e parece que assim funciona. é isso mesmo ou isso pode gerar problemas no futuro? ficou assim

Sub Letras(ByVal ctl As Object)
ctl.Text = StrConv(ctl.Text, 1)
ctl.Text = Replace(ctl.Text, [Ô]Á[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ã[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Â[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ä[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]À[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]é[Ô], [Ô]E[Ô])
....
End Sub

Call Letras(Me.nomedocontrole)


agradeço...
JABA 14/08/2014 21:09:40
#440456
Resposta escolhida
MARSOLIM, tudo no vb.net descende de Object, até mesmo os controles. Porém, se você quiser seguir o mesmo principio do seu primeiro exemplo, então você tem que importar a biblioteca System.Windows.Forms.Control, daí ficaria assim:

Sub Letras(ByVal ctl As System.Windows.Forms.Control)
ctl.Text = StrConv(ctl.Text, 1)
ctl.Text = Replace(ctl.Text, [Ô]Á[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ã[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Â[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]Ä[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]À[Ô], [Ô]A[Ô])
ctl.Text = Replace(ctl.Text, [Ô]é[Ô], [Ô]E[Ô])
....
End Sub

Call Letras(Me.nomedocontrole)
MARSOLIM 15/08/2014 00:00:00
#440460
valeu pessoal. fecha a conta e passa a regua
Tópico encerrado , respostas não são mais permitidas