TRATAR ERRO NA CLASSE

ADHEL 22/08/2013 21:54:27
#427975
Pessoal.
Eis aqui mais uma dúvida.
O erro é o famoso e nefasto.
 Conversion from string [Ô][Ô] to type [ô]Integer[ô] is not valid.  

Eu sei o que quer dizer, que não é válido essa conversão.
Eu sei também que se eu usasse esse código no botão;
    If txtId.Text = [Ô][Ô] Then
MessageBox.Show([Ô]Selecione uma marca[Ô])
Exit Sub
Else
deletar()
End If

resolveria o meu problema.
Só que quero tratar esse código na classe e não no formulário.
Segue o código na classe
   Public Sub deletar()
If _id.HasValue = Nothing Then
KryptonMessageBox.Show([Ô]SELECIONE UMA MARCA[Ô], empresa, MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
[ô]If _id = [Ô][Ô] Then
[ô] Exit Sub
Else
Dim resultado As DialogResult
resultado = KryptonMessageBox.Show([Ô]EXCLUIR ESSA MARCA ?[Ô], empresa, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If resultado = DialogResult.Yes Then
Try
c.ConOpen()
Dim sql As String = [Ô]update marcas set situacao=@situacao where id=@id[Ô]
c.Cmd = New MySqlCommand(sql, c.Cnn)
c.Cmd.Parameters.AddWithValue([Ô]@situacao[Ô], _situacao)
c.Cmd.Parameters.AddWithValue([Ô]@id[Ô], _id)
c.Cmd.ExecuteNonQuery()
KryptonMessageBox.Show([Ô]DADOS GRAVADOS[Ô], empresa, MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
c.ConClose()
End Try
End If
End If
End Sub

Segue o código no formulário
    Sub deletar()
With _m
_m.Situacao = 1
_m.Id = CInt(txtId.Text)
_m.deletar()
End With
carregaGrid()
End Sub

Como ficaria o código correto na classe?
Obrigado a todos
NILSONTRES 23/08/2013 01:43:09
#427981
Public Function deletar() As Boolean
If _id.HasValue = Nothing Then
KryptonMessageBox.Show([Ô]SELECIONE UMA MARCA[Ô], empresa, MessageBoxButtons.OK, MessageBoxIcon.Information)
Return False
Else
Dim resultado As DialogResult
resultado = KryptonMessageBox.Show([Ô]EXCLUIR ESSA MARCA ?[Ô], empresa, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If resultado = DialogResult.Yes Then
Try
c.ConOpen()
Dim sql As String = [Ô]update marcas set situacao=@situacao where id=@id[Ô]
c.Cmd = New MySqlCommand(sql, c.Cnn)
c.Cmd.Parameters.AddWithValue([Ô]@situacao[Ô], _situacao)
c.Cmd.Parameters.AddWithValue([Ô]@id[Ô], _id)
c.Cmd.ExecuteNonQuery()
KryptonMessageBox.Show([Ô]DADOS GRAVADOS[Ô], empresa, MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception
MessageBox.Show(ex.Message)
Return False
Finally
c.ConClose()
Return True
End Try
End If
End If
End Sub



[ô]na chamada
With _m
_m.Situacao = 1
_m.Id = CInt(txtId.Text)
_m.deletar()
End With
if _m.deletar=true then
carregaGrid()
end if
NILSONTRES 23/08/2013 01:54:21
#427982
Uma dica para deixar o código com menos if[ô]s e variaveis, consequentemente mais facil de se entender.
Ao inves de:
Citação:

Dim resultado As DialogResult
resultado = KryptonMessageBox.Show([Ô]EXCLUIR ESSA MARCA ?[Ô], empresa, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If resultado = DialogResult.Yes Then



Sugiro:
If MsgBox([Ô]Confirma excluir[Ô], MsgBoxStyle.Question + MsgBoxStyle.YesNo, [Ô]CONFIRMAÇÃO[Ô]) = MsgBoxResult.NO Then RETURN FALSE

[ô]OU EXIT SUB
[ô]DAI PRA BAIXO FICA MAIS LIMPO O CODIGO E FACIL DE TRATAR

OCELOT 23/08/2013 08:28:14
#427986
Resposta escolhida
Do jeito que você está fazendo não tem como tratar na classe, já que você passa para ela um inteiro, a conversão de string para integer é feita no formulário então só pode ser tratada no formulário.
ADHEL 23/08/2013 08:42:20
#427987
Nilson
O erro persisti.
Ele ocorre nessa linha em vermelho.
With _m
_m.Situacao = 1
[txt-color=#e80000] _m.Id = CInt(txtId.Text)[/txt-color]
_m.deletar()
End With
Na chamada do formulário, exatamente quando a variável _id recebe um valor nulo do textbox, por isso cheguei a conclusão de que não tem como eu tratar esse erro fora do formulário.
No formulário eu poderia tratar assim sem problemas
   Sub deletar()
Try
With _m
_m.Situacao = 1
_m.Id = CInt(txtId.Text)
_m.deletar()
End With
carregaGrid()
Catch ex As Exception
MessageBox.Show([Ô]selecione uma marca[Ô])
End Try
End Sub


Eu tenho lido bastante que, menor a quantidade de código no formulário, melhor.(Foi o que entendi) .
Por isso essa minha insistência em tratar na classe esse problema.
Mas como mencionado acima, as vezes o tratamento tem que ser no formulário mesmo.
é isso mesmo ,esse erro só poderei tratar no formulário ?
até mais.
ADHEL 23/08/2013 08:45:26
#427988
OK, OCELOT
Muito obrigado já respondeu a minha dúvida acima.
Enquanto estava formulando as palavras, você já tinha respondido.
Tópico encerrado , respostas não são mais permitidas