Ir para conteúdo
Fórum Script Brasil
  • 0

Função Valida e Migração para VB.Net


Carlos Rocha

Pergunta

Dois dificuldades;

1) Peguei o código Delphi abaixo e preciso passa-lo para VB.Net.

Será quie alguém pode me ajudar?

procedure TCPedidos.InicializaListaPgto;
var
  Idx :Integer;
  OpStr : string;
begin
 // limpa seleção
  for Idx := 0 to CLBpgto.Items.Count -1 do
    CLBpgto.Checked[Idx] := False;
 // marca selecionados, conf. foi gravado
  OpStr := Trim(QryPedidosListaPgto.AsString);
  while OpStr <> '' do
  begin
    Idx := Pos(' ', OpStr);
    if Idx > 0 then
    begin
      CLBpgto.Checked[StrToInt(Copy(OpStr, 1, Idx -1))] := True;
      Delete(OpStr, 1, Idx);
    end else
    begin
      CLBpgto.Checked[StrToInt(OpStr)] := True;
      OpStr := '';
    end;
  end;
end;
A ideia aqui é pegar o resultado de listbox gravado no banco que chega separado por virgula e Popula a listbox. 2) O código abaixo é um código que faz validação de campos vazios no formulario. Mas, não sei porque cargas d'água o código sai dando as mensagens de campo vazio 1 por 1 e só para (faz o exit sub) só no endereco.text: Veja:
Private Function Valida() As Boolean

Dim ret As Boolean = True

' Assume sucesso na validao. 

If tipo1.Checked = False Then

If tipo2.Checked = False Then

MessageBox.Show("Escolha o tipo da pessoa se fsica ou jurdica!")

tipo1.Focus()

ret = False

End If

End If

If Nome.Text = "" Then

If tipo1.Checked = True Then

MessageBox.Show("Preencha o Nome!")

Nome.Focus()

ret = False

ElseIf tipo2.Checked = True Then

MessageBox.Show("Preencha a Razo Social!")

Nome.Focus()

ret = False

End If

End If

If cpf_cnpj.Text = "" Or cpf_cnpj.Text = "___.___.___-__" Or cpf_cnpj.Text = "__.___.___/____-__" Then

If tipo1.Checked = True Then

MessageBox.Show("Preencha o CPF!")

cpf_cnpj.Focus()

ret = False

ElseIf tipo2.Checked = True Then

MessageBox.Show("Preencha o CNPJ!")

cpf_cnpj.Focus()

ret = False

End If

End If

If Len(cpf_cnpj.Text) = 14 Then

If Not ValidaCPF(cpf_cnpj.Text) Then

MessageBox.Show("CPF Invlido!")

cpf_cnpj.Focus()

ret = False

End If

ElseIf Len(cpf_cnpj.Text) = 18 Then

If Not ValidaCNPJ(cpf_cnpj.Text) Then

MessageBox.Show("CNPJ Invlido!")

cpf_cnpj.Focus()

ret = False

End If

End If

If Endereco.Text = "" Then

MessageBox.Show("Preencha campo Endereo!")

Endereco.Focus()

ret = False

End If

If Bairro.Text = "" Then

MessageBox.Show("Preencha campo Bairro!")

Bairro.Focus()

ret = False

End If

If Cidade.Text = "" Then

MessageBox.Show("Preencha campo Cidade!")

Cidade.Focus()

ret = False

End If

If Estado.Text = "" Then

MessageBox.Show("Preencha campo Estado!")

Estado.Focus()

ret = False

End If

If Telefone.Text = "" Then

MessageBox.Show("Preencha campo Telefone!")

Telefone.Focus()

ret = False

End If

Return ret

End Function
E para chamar: Assim:
Private Sub Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click

If Novo.Text = "Novo" Then

For Each c As Control In Me.grpClientes.Controls

If TypeOf c Is TextBox OrElse TypeOf c Is MaskedTextBox Then

c.Text = ""

End If

Next

Codigo.Enabled = False

cpf_cnpj.Visible = False

Nome.Visible = False

LabelNome.Visible = False

data.Visible = False

Codigo.Visible = False

LabelCodigo.Visible = False

IE.Visible = False

LabelIE.Visible = False

LabelCPF.Visible = False

Atualizar.Enabled = False

Eliminar.Enabled = False

tipo1.Checked = False

tipo2.Checked = False

Encerrar.Text = "Cancela"

Novo.Text = "Incluir"

habilita()

Nome.Focus()

ElseIf Novo.Text = "Incluir" Then

If Not Valida() Then

Exit Sub

End If

dr = dt.NewRow

incluirRegistro(dr)

Novo.Text = "Novo"

Encerrar.Text = "Encerrar"

Atualizar.Enabled = True

Eliminar.Enabled = True

desabilita()

End If

End Sub

Onde será que esta o erro?

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Galera. Consegui traduzir para VB.Net.

Só que na hora de marcar os campos nma checklistbox, da erro e diz que ela é somente leitura.;

Como posso resolver isso?

Ficou assim:

Private Sub InicializaListaPgto()
        Dim Idx As Integer
        Dim OpStr As String
        For Idx = 0 To CondPgto.Items.Count - 1
            CondPgto.CheckedItems(Idx) = False
            'marca selecionados, conforme foi gravado
            OpStr = Trim(dr.Item("CondPgto"))
            While OpStr <> ""
                Idx = InStr(" ", OpStr)
                If Idx > 0 Then
                    CondPgto.CheckedItems(Convert.ToInt32(OpStr.Substring(1, Idx - 1))) = True
                    OpStr.Remove(1, Idx)
                Else
                    CondPgto.CheckedItems(Convert.ToInt32(OpStr)) = True
                    OpStr = ""
                End If
            End While
        Next Idx
    End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

Ola, tentei do jeito abaixo mas ta dando o seguiunte erro:

CheckedListBox.CheckedItemCollection é somente leitura

Como resolve-lo? No Delphi não da isso!

Sub InicializaListaPgto()

Dim Idx As Integer

Dim OpStr As String

For Idx = 0 To CondPgto.Items.Count - 1

CondPgto.CheckedItems(Idx) = False

'marca selecionados, conforme foi gravado

OpStr = Trim(dr.Item("CondPgto").ToString)

While OpStr <> ""

Idx = InStr(" ", OpStr)

If Idx > 0 Then

CondPgto.CheckedItems(Int(OpStr.Substring(1, Idx - 1))) = True

OpStr.Remove(1, Idx)

Else

CondPgto.CheckedItems(Int(OpStr)) = True

OpStr = ""

End If

End While

Next Idx

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

Ola pessoal vou tentar se mais específico.

seguinte:

tenho a string

Dim OpStr as string = "" 07 14"

e tenho uma checkedlistbox com os ítens 07 14 21 e 28

Eu preciso criar uma matriz com os valores que estão na string OpStr tirando os espaços e de cada índice dessa matriz(Os seus valores 07 ou 14) e ver se existe na checkedlistbox algum item comesse valor, se tiver, marca-lo.

Como fazer isso?

Link para o comentário
Compartilhar em outros sites

  • 0

No caso abaixo, onde eu colocari a sua inclusão?

item = CondPgto.FindString("07")
Private Sub InicializaListaPgto()
        Dim idx As Integer
        Dim opstr As String
        For idx = 0 To CondPgto.Items.Count - 1
            CondPgto.SetItemChecked(idx, False)
            'marca selecionados, conforme foi gravado
            opstr = Trim(dr.Item("condpgto").ToString)
             While opstr <> ""
                idx = InStr(opstr, " ")
                MessageBox.Show(idx)
                If idx > 0 Then
                    CondPgto.SetItemChecked(Int(opstr.substring(1, idx - 1)), True)
                    'condpgto.checkeditems.indexof(int(opstr.substring(1, idx - 1)))
                    opstr.remove(1, idx)
                Else
                    CondPgto.SetItemChecked(Int(opstr), True)
                    'condpgto.checkeditems.indexof(int(opstr.substring(1, idx - 1)))
                    opstr = ""
                End If
            End While
        Next idx
    End Sub

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

O código abaixo esta uncionando correto com um pormenor:

A cada pedido que eu mostro, ele guarda na chequelistbox o ítem dele.

Tipo:

Pedido 1 -> Cliente pediu compra a prazo para pagar com 07 e 14 dias

Pedido 2 -> Cliente pediu compra a prazo para pagar com 21 e 28 dias

na hora de eu mostrar o Pedido 1, ele mostra mas na hora de eu mostrar o Pedido 2 ele marca os do 2 e tambem o do 1 se eu voltar no pediddo 1 continua mostrando os do 2 e o do 1 tambem.

Como resolve isso?

Private Sub InicializaListaPgto()
        Dim OpStr As String = Trim(dr.Item("CondPgto"))
        'Cria um array com os valores, colocando-os separados por espaco em diferentes elementos do array
        Dim listaValores As String()
        listaValores = OpStr.Split(" ")
        Dim item As String
        Dim indice As Integer
        'Percorre todos os itens que existem no seu array
        For Each item In listaValores
            'Procura o item no CheckedListBox
            'Se encontrar, retorna o ndice do item
            'Se não encontrar, retorna -1
            indice = Me.CondPgto.Items.IndexOf(item)
            'Encontrou o item na lista?
            If (indice > 0) Then
                'Sim, então faz a marcao (Checked)
                Me.CondPgto.SetItemChecked(indice, True)
            ElseIf (indice = 0) Then
                'Sim, ento faz a marcao (Checked)
                Me.CondPgto.SetItemChecked(0, True)
            End If
        Next
    End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

Ok pessoal essa tambem já consegui graças a voces.

Agora to com um outro problema dentro do mesmo assunto.

Porem, na ordem inversa:

Voces me ajudaram a preecher(marcar) a CheckedListBox a partir de valores que vem do banco como string em valores separados por um espaço.

Agora preciso o contrario: Enviar para o banco os valores marcados na CheckListBox em form de uma string em valores separados por um espaço.

Cheguei a fazer um código mas só consigo gravar os índice e não os valores.

Vejam:

SnippetIf CondPgto.Visible = True Then

  For Idx = 0 To CondPgto.Items.Count - 1

    If CondPgto.CheckedItems(Idx) Then

       Dim idx2 As String = ""

       If CondPgto.CheckedItems(Idx) = 0 Then idx2 = "07"

       If CondPgto.CheckedItems(Idx) = 1 Then idx2 = "14"

       If CondPgto.CheckedItems(Idx) = 2 Then idx2 = "21"

       If CondPgto.CheckedItems(Idx) = 3 Then idx2 = "28"

       Idy = Idy + Convert.ToString(idx2) + " "

    End If

  Next Idx

Else

  Idy = ""

End If
A CheckListBox´tem só 04 ítems. Ah, ah proposito o código que faz a marcação da CheckedListBox a partir de valores que vem do banco como string em valores separados por um espaço. Segue:
SnippetPrivate Sub InicializaListaPgto()

Dim o As Integer

'Percorre todos os itens que existem no CheckedListBox

For o = 0 To Me.CondPgto.Items.Count - 1

'Desmarca (Uncheck) cada um dos itens

Me.CondPgto.SetItemChecked(o, False)

Next

Dim OpStr As String = Trim(dr.Item("CondPgto"))

'Cria um array com os valores, colocando-os separados por espaco em diferentes elementos do array

Dim listaValores As String()

listaValores = OpStr.Split(" ")

Dim item As String

Dim indice As Integer

'Percorre todos os itens que existem no seu array

For Each item In listaValores

'Procura o item no CheckedListBox

'Se encontrar, retorna o ndice do item

'Se no encontrar, retorna -1

indice = Me.CondPgto.Items.IndexOf(item)

'Encontrou o item na lista?

If (indice > 0) Then

'Sim, ento faz a marcao (Checked)

Me.CondPgto.SetItemChecked(indice, True)

ElseIf (indice = 0) Then

'Sim, ento faz a marcao (Checked)

Me.CondPgto.SetItemChecked(0, True)

End If

Next

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

É mas como adapto:

If CondPgto.GetSelected(0) Then
            'está marcado o indice 0
        End If
No código abaixo para, formar a string com os valorers mostrados nas checkboxs e não os seus índices?
If CondPgto.Visible = True Then
            For Idx = 0 To CondPgto.Items.Count - 1
                If CondPgto.CheckedItems(Idx) Then
                    MsgBox(Idx)
                    Dim idx2 As String = ""
                    If CondPgto.CheckedItems(Idx) = 0 Then idx2 = "07"
                    If CondPgto.CheckedItems(Idx) = 1 Then idx2 = "14"
                    If CondPgto.CheckedItems(Idx) = 2 Then idx2 = "21"
                    If CondPgto.CheckedItems(Idx) = 3 Then idx2 = "28"
                    Idy = Idy + Convert.ToString(idx2) + " "
                End If
            Next Idx
        Else
            Idy = ""
        End If

Como faço para pegar o valor referente aquele indice da chekedlistbox?

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

aqui o 0 é o indice:

If CondPgto.GetSelected(0) Then
    'está marcado o indice 0
End If[/code] você pode fazer a mesma coisa com o 1:
[code]If CondPgto.GetSelected(1) Then
    'está marcado o indice 1
End If
e pronto, ue, você mesmo já fez o codigo ai. pro indice 0 não é o texto "07"?? qual a dificuldade?? se você quer pegar o texto q ta checkbox em vez de escrever a string, usa a propriedade Items. exemplo:
If CondPgto.GetSelected(1) Then
    Idx2 = CondPgto.Items(1).ToString()
End If[/code]

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...