VB2008: ArgumentOutOfRangeException was unhandled | ZWAME Fórum
VB2008: ArgumentOutOfRangeException was unhandled
Discussão em 'Programação' iniciada por tds, 7 de Abril de 2009. (Respostas: 10; Visualizações: 1202)
Durante o estudo dum programa que peguei, apareceu um erro que eu não o percebo.
Ao carregar pela primeria vez num botão, ele faz-o perfeitamente.
Ao carregar nele uma segudna vez, já dá erro.
For i As Integer = 0 To dtSet.Tables(bdTables(0)).Rows.Count - 1
tsProdutos.Items.Add(dtSet.Tables(bdTables(0)).Rows(i).Item(1))
MessageBox.Show(i)
If frmMain.lstProdutos.SelectedItems.Count > 0 Then
tsProdutos.SelectedIndex = frmMain.lstProdutos.SelectedIndex
tsProdutos.SelectedIndex = 0
InvalidArgument=Value of '0' is not valid for 'SelectedIndex'. Parameter name: SelectedIndex
O erro varia entre esta linha
A meu ver, o teu erro resolve-se eliminando a linha
e ficando só com o IF desta forma:
Digo isto porque, seguindo a lógica do IF, se não existem items seleccionados, e como na maioria dos objectos os indexs são Zero-based, ao estares a dizer que o .SelectedIndex = 0 estás a dizer ao objecto para seleccionar o primeiro item. Como o objecto não tem items para seleccionar dá-te erro.
Podes também trocar para .SelectedIndex = -1 mas isso não funciona em todos os objectos e como não sei que tipo de objecto o tsProdutos é, não te posso garantir que resolva mas experimenta.
Em relação ao erro aparecer nesta linha:
tens que ter em atenção um promenor. Pelo que reparei tu estás a preencher a lista com dados vindos da base de dados, e pelo que me deu a entender, o numero de items que estás a adicionar pode ser diferente do numero de items que tens no objecto lstProdutos, logo se no lstProdutos, o Index seleccionado for maior do que o numero de items que tens no objecto tsProdutos, o programa vai arrebentar.
Espero que a minha análise do teu código esteja correcta e que a resposta te ajude
Tal como dizias, a tua análise estava correcta, muito obrigado!
Implementei uma maneira de ver o tamanho do dataset e realmente ele fica com o valor de -1, e isso eu não estou a perceber porquê.
O que se passa é que ele "salta" linhas de código...
frmMain.statusBarProgress1.Value = 25
MessageBox.Show(dtSet.Tables(bdTables(0)).Rows.Count - 1)
Este é o código. O que o compilador (ou outra coisa qualquer, não sei D: ) me está a fazer é saltar o ciclo For, e por isso é que o dataset fica a -1 (certo? D: )...
Alguma ideia para isto não acontecer? D:
tkz []
Hm... afinal ele depois de fechar a janela que mostra a tabela, fica a assumir o dataset tables com valor de -1 D:
Porquoi? D:
Normalmente, quaisquer variáveis/dados que tenhas num formulário costumam passar a 0/empty/nothing dependendo do tipo de váriavel porque elas só estão activas enquanto o formulário estiver ligado.
Se queres passar dados de um formulário para outro, convêm passares os dados antes de fechares o formulário. Das três uma:
1- Ou abres o segundo formulário, corres o código que tem que ser corrido e depois fechas o primeiro formulário (o tal que contem os dados).
2- Ou passas os dados num parametro de uma função.
3- Ou metes os dados num modulo e passam a ficar acessiveis em qualquer parte do programa, a qualquer altura.
Obrigado pela ajuda! =D
Consegui "saltar" o erro... penso que para a resolução da amneira de como estavas a dizer, como nem eu ainda percebi bem o programa e preciso de ser o mais rápido possivel a fazer o projecto, o que eu fiz foi "recarregar" o valor antes de abrir a nova form... não é tão "engenhoso", mas serve até ver!
Já agora, estou a tentar também fazer... ora bem - Na aplicação, gerar um novo produto - que é criado também na base de dados (access), mas queria que o produto fosse criado já com matérias primas pré-definidas. Como posso implementar isso? Faço um "script" na base de dados que sempre que um produto seja criado, preenche com determinados valores ou faço ao nivel da aplicação?
Vou andar À procura de tutoriais para isto... Obrigado pela ajuda
Like u say-> Quem sabe sabe, quem não sabe usa o google xD
Última edição: 14 de Abril de 2009
Lol.. Eu também tou a fazer quote a um gajo aqui do forum.
Em relação ao teu problema, acho que o "script" a nível da base de dados é melhor porque se mais tarde quiseres alterar os items iniciais com que o produto é iniciado, basta ires ao "script" e alteras lá. Não necessitas de mexer no código do programa.
k, tkz pla dica =D
Hm... agora... Outra dúvida... Como raio vou criar isso?! xD
Há alguma ferramenta no access que permite fazer isso?
Ou faço um "à lá pate"?
#9 14 de Abril de 2009
sinceramente não uso acess, nem nunca me dei ao trabalho de abrir e ver como funciona.. lembro-me de ter dado no meu curso profissional no 2º do curso mas não me lembro como funciona.
em Sql sabia-te explicar mas em acess não sei, mas decerteza que a quem te saiba responder
#10 14 de Abril de 2009
k, tkz na mesma
Em principio farei um script no programa D: o programa a ir buscar valores À base de dados de um determinado produto (selecionar um para ficar predefinido) e adicionar sempre essas matrizes do produto ao novo produto introduzido D: