none
Erro no Código RRS feed

  • Pergunta

  • Estou montando um código que tem o intuito de limpar todos os TextBox da minha Fomr.
    Procurei na net e achei um código e tals,alterei o que tinha que alterar só que quando eu rodo o mesmo dá o seguinte erro:


    Será que alguém sabe o que está ocorrendo ? Desde já agradeço

    quarta-feira, 18 de abril de 2012 11:04

Respostas

  • Public Class Form1
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Negocios.LimparControles(Me)
        End Sub
    
    End Class
    
    Public Class Negocios
        Public Shared Sub LimparControles(_form As Form)
            If (_form.Controls.Count > 0) Then
                Dim _c As Control
                For Each _c In _form.Controls
                    If (TypeOf _c Is TextBox) Then
                        _c.Text = String.Empty
                    End If
                Next
            End If
        End Sub
    End Class


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    • Marcado como Resposta Ninho_Blink quarta-feira, 18 de abril de 2012 14:45
    quarta-feira, 18 de abril de 2012 11:47
  • Nesse caso voce pode chamar assim:

    No Form voce chama assim:

    Call apaga(Me)

    E na sua bLL fica assim:

    Sub apaga(pForm as Form)
    dim _c as control
    for each _c in pForm.controls
        if(typeOf _c is textbox) then
           _c.text = nothing
        end if
    next
    End Sub
    Se voce estiver usando o Form e apenas os campos,sem algum groupbox,voce passa o Me se tiver usando group vc passa o Me.grupo,e na recepcao do parsmetro apaga(pObj as GroupBox)


    • Editado Eduardo xUni quarta-feira, 18 de abril de 2012 11:55
    • Marcado como Resposta Ninho_Blink quarta-feira, 18 de abril de 2012 14:45
    quarta-feira, 18 de abril de 2012 11:47
  • Pra evitar esse problema de escopo,deixe seu metodo na camada de negocio em static,ou seja,deixar ela statica,assim nao precisa ficar instanciando.

    Public Shared Sub apaga(pObj As Form)

    Desta forma nao precisar usar o new class.

    depois só chamar;

    Call apaga(Nome_do_form)

    • Marcado como Resposta Ninho_Blink quinta-feira, 19 de abril de 2012 20:35
    quinta-feira, 19 de abril de 2012 20:28
  • Shared faz com que nao precise criar uma instancia do objeto,evita 'comandos' desse tipo:

    dim classe as new Classe_Negocio()

    Dessa forma só chamar direto pelo nome do metodo,igual voce fez,e funcionou.

    Procure estudar "Modificadores de acessos","escopo de variaveis" e "instancia de objetos".

    ...

    Como voce ta fazendo isso (limpar outro form,atraz do principal)?

    • Editado Eduardo xUni quinta-feira, 19 de abril de 2012 20:49
    • Marcado como Resposta Ninho_Blink quinta-feira, 19 de abril de 2012 20:51
    quinta-feira, 19 de abril de 2012 20:45

Todas as Respostas

  • No lugar do formulario,use o Me (se for o mesmo form que voce esta usando)

    pra deixar mais enxuto:

    dim _c as control
    for each _c in me.controls
        if(typeOf _c is textbox) then
           _c.text = nothing
        end if
    next

    quarta-feira, 18 de abril de 2012 11:21
  • Então no caso eu não posso usar o Me,por que estou programando em 3 camadas
    Então minha camada Que possui os Form chama a camada de negocio,e é justo na camada de negocio que eu deixei esse código.
    Assim minha camada aonde está os Forms chama a camada de negocio que é responsável pela limpeza.
    No caso não sei como eu iria fazer para invés de colocar o ME colocar a Form que está chamando.
    Teria alguma sugestão ? Desde já muito obrigado ^^
    quarta-feira, 18 de abril de 2012 11:33
  • Ddentro do teu metodo faz assim

    public tipo nomedometodo(byvale meuform As form)

    ddepois chama no teu form principal e escreve dentro da referencia o teu form onde existe os texos k queres limpar.


    Se o amor fosse pecado, quem seria INOCENTE?

    quarta-feira, 18 de abril de 2012 11:43
    Moderador
  • Public Class Form1
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Negocios.LimparControles(Me)
        End Sub
    
    End Class
    
    Public Class Negocios
        Public Shared Sub LimparControles(_form As Form)
            If (_form.Controls.Count > 0) Then
                Dim _c As Control
                For Each _c In _form.Controls
                    If (TypeOf _c Is TextBox) Then
                        _c.Text = String.Empty
                    End If
                Next
            End If
        End Sub
    End Class


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    • Marcado como Resposta Ninho_Blink quarta-feira, 18 de abril de 2012 14:45
    quarta-feira, 18 de abril de 2012 11:47
  • Nesse caso voce pode chamar assim:

    No Form voce chama assim:

    Call apaga(Me)

    E na sua bLL fica assim:

    Sub apaga(pForm as Form)
    dim _c as control
    for each _c in pForm.controls
        if(typeOf _c is textbox) then
           _c.text = nothing
        end if
    next
    End Sub
    Se voce estiver usando o Form e apenas os campos,sem algum groupbox,voce passa o Me se tiver usando group vc passa o Me.grupo,e na recepcao do parsmetro apaga(pObj as GroupBox)


    • Editado Eduardo xUni quarta-feira, 18 de abril de 2012 11:55
    • Marcado como Resposta Ninho_Blink quarta-feira, 18 de abril de 2012 14:45
    quarta-feira, 18 de abril de 2012 11:47
  • Obrigado a todos
    Eu usei o código que o Phoenix_Ed209 e funcionou.
    Não cheguei a usar o código do RSCS mas acredito que daria certo tb.
    Mais uma vez obrigado a todos.
    quarta-feira, 18 de abril de 2012 14:45
  • Putz agora deu o seguinte erro quando estou tentando passar uma forma por parametro.

    quinta-feira, 19 de abril de 2012 15:31
  • Uma string vazia não é um objeto nulo.

    E você pode declarar variáveis no For Each.

    quinta-feira, 19 de abril de 2012 15:42
  • Voce ta usando como o for each?
    quinta-feira, 19 de abril de 2012 15:53
  • Desculpa minha ignorancia e que sou novo em VB.net então estou meio perdido e não entendi a pergunta de vocês.
    Seria isso ?
    quinta-feira, 19 de abril de 2012 16:09
  • Usa a resposta do RSCS.
    quinta-feira, 19 de abril de 2012 16:14
  • Instanciar a classe onde esta o Bloco:
    Dim apaga as new SUA_CLASSE
            Try
               'codigo
            Catch ex As Exception
                
            Finally
                Call apaga.teste(Me)
            End Try
    passe o parametro Me ao invez do nome do form,isso se referenciando pelo seu Form em si.




    • Editado Eduardo xUni quinta-feira, 19 de abril de 2012 16:40
    quinta-feira, 19 de abril de 2012 16:23
  • Cara Não entendi
    Eu vou criar uma variavel apaga ?
    E aonde eu vou por essa parte?
    • Editado Ninho_Blink quinta-feira, 19 de abril de 2012 18:36
    quinta-feira, 19 de abril de 2012 18:30
  • Oque vc ta passando no parametro apaga() é o form corrente? Ou vc esta referenciando outro form?
    Esse erro ta ocorrendo porque o objeto que ele esta tentando acessar não é o esperado/valido.
    quinta-feira, 19 de abril de 2012 19:13
  • Eu estou passando outro form
    Por que e assim meu software está em 3 camadas,então joguei a parte da limpeza dos textbox na cadama de negocio.
    Quando eu insero um registro a camade de negocio chama a camada de banco de dados.
    Então quando o registro e inserido com sucesso a camada de negocio tem que limpar a form que realizou o registro.Que seria a form que eu estou tentando passar por parametro.
    quinta-feira, 19 de abril de 2012 19:57
  • Pra evitar esse problema de escopo,deixe seu metodo na camada de negocio em static,ou seja,deixar ela statica,assim nao precisa ficar instanciando.

    Public Shared Sub apaga(pObj As Form)

    Desta forma nao precisar usar o new class.

    depois só chamar;

    Call apaga(Nome_do_form)

    • Marcado como Resposta Ninho_Blink quinta-feira, 19 de abril de 2012 20:35
    quinta-feira, 19 de abril de 2012 20:28
  • Cara deu certo.
    Só uma coisa teria como me explicar o que Shared faz ?
    Por que eu alterei mas não entendi por que deu certo,quer dizer ele só da certo quando eu compilo a form direto.
    Se pela minha form principal eu chamar a outra form ai ele não limpa,mas isso eu vou tentar fuçar para arrumar.
    Ficaria muito grato
    • Editado Ninho_Blink quinta-feira, 19 de abril de 2012 20:41 Deu erro depois
    quinta-feira, 19 de abril de 2012 20:35
  • Shared faz com que nao precise criar uma instancia do objeto,evita 'comandos' desse tipo:

    dim classe as new Classe_Negocio()

    Dessa forma só chamar direto pelo nome do metodo,igual voce fez,e funcionou.

    Procure estudar "Modificadores de acessos","escopo de variaveis" e "instancia de objetos".

    ...

    Como voce ta fazendo isso (limpar outro form,atraz do principal)?

    • Editado Eduardo xUni quinta-feira, 19 de abril de 2012 20:49
    • Marcado como Resposta Ninho_Blink quinta-feira, 19 de abril de 2012 20:51
    quinta-feira, 19 de abril de 2012 20:45
  • Entendi
    Beleza vou estar procurando essa parte
    Muito obrigado pela ajuda
    quinta-feira, 19 de abril de 2012 20:51