LOOP EM VB.NET
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..
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..
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.
Bom não use o codigo na integra, é só uma ideia isso ai, certo!!
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!!
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
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
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.
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
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?
porém agora esta em loop infinito
coo faço para parar e mostrar uma mensagem após ler o ultimo registro?
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.
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.
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?
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?
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