• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

passado

Simplificação de codigo para limpar controls e uso de errorprovider

20 mensagens neste tópico

Boas pessoal existe alguma forma de simplificar este codigo, de modo que funcione em todos os controlos, richtext, combobox, textbox etc

Public Sub Limpar(ByVal controlP As Control)
        Dim ctl As Control
        For Each ctl In controlP.Controls
            If TypeOf ctl Is TextBox Then
                DirectCast(ctl, TextBox).Text = String.Empty
            ElseIf ctl.Controls.Count > 0 Then
                Limpar(ctl)
            End If
            If TypeOf ctl Is ComboBox Then
                DirectCast(ctl, ComboBox).Text = String.Empty
            ElseIf ctl.Controls.Count > 0 Then
                Limpar(ctl)
            End If
            If TypeOf ctl Is RichTextBox Then
                DirectCast(ctl, RichTextBox).Text = String.Empty
            ElseIf ctl.Controls.Count > 0 Then
                Limpar(ctl)
            End If
        Next
    End Sub

Outra minha duvida é como usar um errorprovider numa textbox que esta numa toolstrip eu o codigo que tenho que numa textbox normal funcionava e este:

    Private Sub pesquisa()
        ListBox1.Visible = True
        If searchTextBox.Text.Trim.Length > 1 Then
            ErrorProvider1.SetError(searchTextBox, "")
            Dim da As BDSofioDataSetTableAdapters.ContactosTableAdapter = New BDSofioDataSetTableAdapters.ContactosTableAdapter
            ListBox1.DataSource = da.GetDataByNome("%" & searchTextBox.Text & "%")
            ListBox1.DisplayMember = "Nome"
            ListBox1.ValueMember = "ID_Contacto"
            ListBox1.Refresh()
        Else
            ErrorProvider1.SetError(searchTextBox, "Informe o nome do cliente com no mínimo 2 caracteres...")
        End If
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Caso queiras limpar o texto de todos os teus controlos, e atenção que tem que ter todos a propriedade text (os que tu referiste têm)

Public Sub Limpar(ByVal controlP As Control)
        Dim ctl As Control
        For Each ctl In controlP.Controls
              ctl.text = String.Empty
        Next
    End Sub

Caso tenhas mais controlos, também tens outra solução, algo do género, colocas um valor na tag como 1, caso queiras que esse seja limpo

Public Sub Limpar(ByVal controlP As Control)
        Dim ctl As Control
        For Each ctl In controlP.Controls
              IF CInt(ctl.tag) = 1 Then ctl.text = String.Empty
        Next
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Caso queiras limpar o texto de todos os teus controlos, e atenção que tem que ter todos a propriedade text (os que tu referiste têm)

Public Sub Limpar(ByVal controlP As Control)
        Dim ctl As Control
        For Each ctl In controlP.Controls
              ctl.text = String.Empty
        Next
    End Sub

Caso tenhas mais controlos, também tens outra solução, algo do género, colocas um valor na tag como 1, caso queiras que esse seja limpo

Public Sub Limpar(ByVal controlP As Control)
        Dim ctl As Control
        For Each ctl In controlP.Controls
              IF CInt(ctl.tag) = 1 Then ctl.text = String.Empty
        Next
    End Sub

Boas, obrigado, e como chamo a função?

ja agora a minha net caiu quando ia a fazer edit e so vi a tua resposta depois de fazer, consegues ajudarme com o erro provider?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Public Sub Limpar()
        Dim ctl As Control
        For Each ctl In controlP.Controls
              ctl.text = String.Empty
        Next
    End Sub

Caso tenhas mais controlos, também tens outra solução, algo do género, colocas um valor na tag como 1, caso queiras que esse seja limpo

Public Sub Limpar()
        Dim ctl As Control
        For Each ctl In controlP.Controls
              IF CInt(ctl.tag) = 1 Then ctl.text = String.Empty
        Next
    End Sub

Aliás, nem vi que tinhas um parâmetro no procedimento.

Simplesmente quando quiseres limpar chamas o procedimento:

Limpar()

Explica-me melhor a outra dúvida, porque não percebi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Public Sub Limpar()
        Dim ctl As Control
        For Each ctl In controlP.Controls
              ctl.text = String.Empty
        Next
    End Sub

Caso tenhas mais controlos, também tens outra solução, algo do género, colocas um valor na tag como 1, caso queiras que esse seja limpo

Public Sub Limpar()
        Dim ctl As Control
        For Each ctl In controlP.Controls
              IF CInt(ctl.tag) = 1 Then ctl.text = String.Empty
        Next
[code=vbnet]Public Sub Limpar()
        Dim ctl As Control
        For Each ctl In controlP.Controls
              ctl.text = String.Empty
        Next
    End Sub

Assim nao funcionou :S

A minha outra questao é:

Eu tinha um errorprovider para uma textbox normal, entretanto resolvi remover essa textbox e colocar uma textbox num toolstrip, e agora queria que esse erro provider funcionase na textbox do toolstrip

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok consegui resolver a do error provider era so adicionar .textbox xD

aqui fica o codigo completo:

Private Sub pesquisa()
        ListBox1.Visible = True
        If searchTextBox.Text.Trim.Length > 1 Then
            ErrorProvider1.SetError(searchTextBox.TextBox, "")
            Dim da As BDSofioDataSetTableAdapters.ContactosTableAdapter = New BDSofioDataSetTableAdapters.ContactosTableAdapter
            ListBox1.DataSource = da.GetDataByNome("%" & searchTextBox.Text & "%")
            ListBox1.DisplayMember = "Nome"
            ListBox1.ValueMember = "ID_Contacto"
            ListBox1.Refresh()
        Else
            ErrorProvider1.SetError(searchTextBox.TextBox, "Informe o nome do cliente com no mínimo 2 caracteres...")
        End If
    End Sub

So falta mesmo o processo de limpeza dos campos :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas qual dos meus exemplos é que escolheste? O 1º ou o 2º?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas qual dos meus exemplos é que escolheste? O 1º ou o 2º?

O segundo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E definiste a tag  com o valor 1 nos controlos que querias limpar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E definiste a tag  com o valor 1 nos controlos que querias limpar?

Sim

Eu para chamar o processo de tem de ser

limpar(ME)

senao da erro

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Public Sub Limpar()
        Dim ctl As Control
        For Each ctl In controlP.Controls
              IF CInt(ctl.tag) = 1 Then ctl.text = String.Empty
        Next
    End Sub

De certeza que colocaste este código?

E o teu formulário chama-se controlP? De certeza que ele está a chamar a função? Corre em modo debug, e vê se ele a chama.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Public Sub Limpar()
        Dim ctl As Control
        For Each ctl In controlP.Controls
              IF CInt(ctl.tag) = 1 Then ctl.text = String.Empty
        Next
    End Sub

De certeza que colocaste este código?

E o teu formulário chama-se controlP? De certeza que ele está a chamar a função? Corre em modo debug, e vê se ele a chama.

Sim e em vez de controlP coloquei o nome da minha form e nada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim e em vez de controlP coloquei o nome da minha form e nada

Não me respondeste à pergunta, se sabes que ele chama mesmo a função. Sempre chegaste a fazer debug?

Aqui funciona.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me respondeste à pergunta, se sabes que ele chama mesmo a função. Sempre chegaste a fazer debug?

Aqui funciona.

ups desculpa, sim chama a função

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma questão, esses controlos estão dentro de panels ou outros containers que não o formulário?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma questão, esses controlos estão dentro de panels ou outros containers que não o formulário?

Esta dentro de um panel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então coloca antes assim:

Public Sub Limpar(ByVal container As Control)
        Dim ctl As Control
        For Each ctl In container.Controls
            If CInt(ctl.Tag) = 1 Then ctl.Text = String.Empty
            Me.Limpar(ctl)
        Next
    End Sub

E para chamares tens que colocar

Limpar(Me)

Isto pesquisa recursivamente por controlos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então coloca antes assim:

Public Sub Limpar(ByVal container As Control)
        Dim ctl As Control
        For Each ctl In container.Controls
            If CInt(ctl.Tag) = 1 Then ctl.Text = String.Empty
            Me.Limpar(ctl)
        Next
    End Sub

E para chamares tens que colocar

Limpar(Me)

Isto pesquisa recursivamente por controlos.

Prefeito funcionou :)

Obrigado

Agora tenho uma duvida que me surgiu, crio outro topico ou posso expor neste?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só uma pequena correcção/melhoria:

    Public Sub Limpar(ByVal container As Control)
        Dim ctl As Control
        For Each ctl In container.Controls
            If CInt(ctl.Tag) = 1 Then ctl.Text = String.Empty

            If ctl.HasChildren Then
                Me.Limpar(ctl)
            End If
        Next
    End Sub

Agora tenho uma duvida que me surgiu, crio outro topico ou posso expor neste?

Cria outro ok ? :)

E assinala o tópico como resolvido!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só uma pequena correcção/melhoria:

    Public Sub Limpar(ByVal container As Control)
        Dim ctl As Control
        For Each ctl In container.Controls
            If CInt(ctl.Tag) = 1 Then ctl.Text = String.Empty

            If ctl.HasChildren Then
                Me.Limpar(ctl)
            End If
        Next
    End Sub

Cria outro ok ? :)

E assinala o tópico como resolvido!

Ok muito obrigado pela ajuda :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora