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

tiagopedro

Limpar todo o form

Mensagens Recomendadas

tiagopedro

Estou a programar uma opção de um strip menu para limpar todos os objetos do form, incluindo textboxes, checkboxes, radiobuttons e comboboxes.

Para isso, tenho usado uma msgbox que pergunta se confirma eliminar as informações. o código que estou a usar segue abaixo. Contudo, não consigo usando o If Then Else que caso o resultado da msgbox seja YES sejam limpos todos os objetos. Qual será o meu erro?

Private Sub NovaFichaToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NovaFichaToolStripMenuItem.Click
    MsgBox("Tem a certeza que deseja eliminar todas as informações introduzidas?", MsgBoxStyle.YesNo, "Nova Ficha")
    If MsgBoxResult.Yes = True Then
        ClearTextFields(me)
    End If
End Sub
Public Sub ClearTextFields(ByVal parent As Control)
    For Each ctl As Control In parent.Controls
        If TypeOf ctl Is TextBox Then
            If ctl.Text.Trim() <> String.Empty Then
                ctl.Text = String.Empty
            End If
        End If
        If TypeOf ctl Is ComboBox Then
            If ctl.Text.Trim() <> String.Empty Then
                ctl.Text = String.Empty
            End If
        End If
        CheckBox1.Checked = False
        CheckBox2.Checked = False
        RadioButton1.Checked = False
        RadioButton2.Checked = False
        RadioButton3.Checked = False
    Next
End Sub

Editado por thoga31

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Usa assim:

Dim result As MsgBoxResult
result = MsgBox("Tem a certeza que deseja eliminar todas as informações introduzidas?", MsgBoxStyle.YesNo, "Nova Ficha")
If result = MsgBoxResult.Yes Then
ClearTextFields(Me)
End If

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

@nelsonr, eu costumo evitar a criação de variáveis para estes casos. No entanto, desconhecia esse método ClearTextFields, muito bom ;)

Select Case MsgBox("Tem a certeza que deseja eliminar todas as informações introduzidas?", MsgBoxStyle.YesNo, "Nova Ficha")
   Case MsgBoxResult.Yes
       ClearTextFields(Me)
End Select


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Em algumas situaçóes prefiro criar variaveis para tornar o código mais simples visualmente.

Esse metodo (ClearTextFields) é o que ele criou para limpar.

Não testei (nem é esse o ponto deste topico), mas pelo que vi, vai ter problemas com controls dentro de controls

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Eish, distracção a minha... lol, estou bem estou :P

Além disso, continuo-me a questionar acerca do Trim.

@tiagopedro, quando mostras a Message Box, não estás a guardar a sua resposta em lado nenhum. Além disso, MsgBoxResult.Yes é um valor e não uma flag. Portanto, estás a comparar uma constante com um booleano, o que não faz sentido.


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jota_wa

Boas

Ele usou o método Trim() para limpar espaço desnecessários no texto,mas que neste caso não faz sentido usar,porque se é para limpar tudo não vale a pena estar a "perguntar" se está vazio ou não.

tiagopedro se não tiveres GroupBoxes ou Panels que contenham os controlos que queres limpar,podes fazer assim:

Private Sub NovaFichaToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NovaFichaToolStripMenuItem.Click
 If MsgBox("Tem a certeza que deseja eliminar todas as informações introduzidas?", MsgBoxStyle.YesNo, "Nova Ficha") = MsgBoxResult.Yes Then
         ClearTextFields()
    End If
End Sub

Public Sub ClearTextFields()
    For Each ctl As Control In Me.Controls
         If TypeOf ctl Is TextBox Then
              CType(ctl, TextBox).Clear()
         ElseIf TypeOf ctl Is ComboBox Then
              CType(ctl, ComboBox).Text = String.Empty
         ElseIf TypeOf ctl Is CheckBox Then
              CType(ctl, CheckBox).Checked = False
         ElseIf TypeOf ctl Is RadioButton Then
              CType(ctl, RadioButton).Checked = False
         End If
    Next
End Sub

Podes utilizar o método Clear() nas TextBox ao invés de colocares "= String.Empty" (é a mesma coisa,apenas dei uma alternativa).Em VB.NET podes utilizar o MsgBox e o MessageBox.Show(),em que se utiliza o MsgBoxResult ou o DialogResult respectivamente para comparar o valor resultante.

O método CType serve para fazeres um cast para o tipo que quiseres,para poderes utilizar os métodos e acções do controlo nativamente.

Cumps

Editado por jota_wa
  • Voto 1

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.