Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

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

Recommended Posts

Dois dificuldades;

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

Será quie alguem 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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não.

Aqui estou recebeno dados do banco para exibir na CheckListBox e o vlor que vem do banco é a String OpStr = "07 14" que tenho que comparar com os itens da checkedlistbox e ver se ela tem algum item comesse valor, se tiver, marca-lo.

 

No caso, o proprio código marcara a CecklistBox os ítens 07 e o 14.

Isso esta listando a escolha da forma de pagamento que foi escolhida pelo cliente na hora do pedido

07 e 14 dias. Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa sub que você postou?

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

Esta funcionando em partes? Esta dando erro?

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei ela e aconteceu outra coisa:

O código abaixo esta funcionando correto com um por menor:

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok pessoal essa tambem ja 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.