LOOP EM VB.NET

MHDSERAFS23 08/12/2010 02:15:11
#359045
gostaria de saber se é possivel criar um loop em vb.net.
Como eu acredito que não vou saber explicar direito, vou citar um exemplo:
tem 10 registros em uma tabela com os campos:
id, text1, text2, text3, text4
Eu visualizo estes campos por datagrid.
gostaria de criar um loop onde ao clicar no botão [Ô]INICIAR[Ô]
eu pego o 1 registro e mostro os dados nos textbox e depois de 5 segundos(aproximadamente) , automaticamente mostra os dados do 2 registro, isto até o 10 registro e ao final aparece uma mensagem [Ô]dados lidos com sucesso[Ô] (a mensagem é simples) eu sei mostrar a mensagem..
MATT1 08/12/2010 02:40:32
#359046
Resposta escolhida
olha uma gambiarra pra vc!!!

1) Carrega os id dos registros em um ListBox. Deixa ele visible False pra não sujar o desenho do seu form.
2) Acrescenta um timer com Interval 500 e Enabled True.
3) Na rotina do timer vc declara um indice de registros.

  
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim i as Integer = 0

List1.SelectIndex = i [ô]carrega o proximo id

[ô]aqui vc vai carregar os dados nos TextBox usando o id selecionado no ListBox
sql = [Ô]Select id,text1,text2,text3,text4 From SuaTabela Where id = [ô][Ô] & List1.Text & [Ô][ô][Ô]
[ô]depende do banco de dados usado, o importante é o Where id pegando o id selecionado do ListBox

i = i + 1 [ô]incrementa 1 para proximo id

[ô]aqui ele vai verificar se chegou ao total do seus registros desabilitar o timer e mandar a msg
if i >= List1.Items.Count - 1 Then
Timer1.Enabled = False
SuaMsgbox
End if

End Sub


Bom não use o codigo na integra, é só uma ideia isso ai, certo!!
MHDSERAFS23 08/12/2010 21:11:57
#359146
TENTEI UTILIZAR ESTE CODIGO MAS NÃO CERTO

ABAIXO O CODIGO QUE ESTOU USANDO PARA NAVEGAR PELOS REGISTROS ATRAVéS DO LISTBOX

Public Sub CarregaDados()
Dim ds As New DataSet
Dim dr As DataRow
Dim dt As New DataTable
Dim adptr As New OleDbDataAdapter([Ô]select * from email_enviado where data_envio = [ô][Ô] & DateTime.Today & [Ô][ô] [Ô], con)
adptr.Fill(ds, [Ô]email_enviado[Ô])
dt = ds.Tables(0)
For Each dr In dt.Rows
ListBox1.Items.Add(dr.Item([Ô]Funcionario[Ô]))
Next
Call limparDados()
End Sub
--------------------------------------------------------------------------------------------------

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

Try
Call limparDados()
If con.State = ConnectionState.Closed Then con.Close()
con.Open()
Dim cmd As New OleDbCommand([Ô]select * from email_enviado where funcionario = [ô][Ô] & ListBox1.SelectedItem & [Ô][ô][Ô], con)
Dim drdr As OleDbDataReader
drdr = cmd.ExecuteReader
drdr.Read()
TXT_COLABORADOR.Text = drdr.Item([Ô]funcionario[Ô])
EMAIL_PARATextBox.Text = drdr.Item([Ô]EMAIL_PARA[Ô])
[ô]EMAIL_COPIATextBox.Text = drdr.Item([Ô]email_copia[Ô])
[ô]EMAIL_OCULTOTextBox.Text = drdr.Item([Ô]email_oculto[Ô])
EMAIL_ASSUNTOTextBox.Text = drdr.Item([Ô]email_assunto[Ô])
EMAIL_CONTEUDOTextBox.Text = drdr.Item([Ô]email_conteudo[Ô])
Label1.Text = drdr.Item([Ô]data_envio[Ô])
cmd.Cancel()
con.Close()


Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

GRATO
JONATHANSTECKER 08/12/2010 21:50:00
#359147
Adicione um Timer no seu Form com a propriedade Interval = 500 e a propriedade Enable = True.
E adicione o Loop de seleção na lista no evento Tick do timer.

    Private selecao As Integer = 0
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.ListBox1.SelectedIndex = selecao
If selecao < Me.ListBox1.Items.Count - 1 Then
selecao += 1
Else
selecao = 0
End If
End Sub
MHDSERAFS23 08/12/2010 22:06:06
#359149
legal , deu certo!!
porém agora esta em loop infinito
coo faço para parar e mostrar uma mensagem após ler o ultimo registro?
MATT1 08/12/2010 22:19:58
#359150
If selecao < Me.ListBox1.Items.Count - 1 Then
selecao += 1
Else
selecao = 0
Timer.Enabled = False
SuaMsgbox
End If

o amigo JONATHANSTECKER esqueceu de desabilitar o timer quando terminar senão, fica ai infinitamente.... .

E no final quando seleção > que o numero de registros vc desabilita o timer e manda a sua caixa de mensagem.
MHDSERAFS23 08/12/2010 22:34:52
#359151
legal, muito obrigado!!!!
agora sim
eu estou conseguindo enviar e-mnail para diversas pessoas mudando assunto e conteudo
mas fazendo testes me deparei com uma situação
e se eu quiser mudar o conteudo ou assunto??
pois como eu coloquei o codigo no ebvento tick ao abrir o form ele ja manda o email
como faço pra inserir o codigo do evento tick num botão, para disparar os emails apenas quando eu clicar no botão?
MATT1 08/12/2010 22:36:51
#359152
aqui, vc deixa o timer desabilitado Timer.Enabled = False, e ai no evento click, vc habilita ele Timer.Enabled =True
Tópico encerrado , respostas não são mais permitidas