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

passado

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

Recommended Posts

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

Share this post


Link to post
Share on other sites
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


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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 :)

Share this post


Link to post
Share on other sites
anolsi

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


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
anolsi

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


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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.


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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.


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
anolsi

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


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
passado

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

Esta dentro de um panel

Share this post


Link to post
Share on other sites
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.


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.