Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

passado

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

Mensagens Recomendadas

passado    0
passado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
anolsi    16
anolsi

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
anolsi    16
anolsi

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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 :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
anolsi    16
anolsi

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
anolsi    16
anolsi

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
anolsi    16
anolsi

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade