1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB2008: ArgumentOutOfRangeException was unhandled

Discussão em 'Programação' iniciada por tds, 7 de Abril de 2009. (Respostas: 10; Visualizações: 1138)

  1. tds

    tds Power Member

    Boas!

    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.

    Código:
    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)
            Next
            If frmMain.lstProdutos.SelectedItems.Count > 0 Then
                tsProdutos.SelectedIndex = frmMain.lstProdutos.SelectedIndex
    
            Else
                tsProdutos.SelectedIndex = 0
            End If
    InvalidArgument=Value of '0' is not valid for 'SelectedIndex'. Parameter name: SelectedIndex


    O erro varia entre esta linha
    Código:
    tsProdutos.SelectedIndex = 0
    e esta
    Código:
    tsProdutos.SelectedIndex = frmMain.lstProdutos.SelectedIndex
    Alguma ajuda?
    Cumpz
     
  2. PNDmartins

    PNDmartins Power Member

    A meu ver, o teu erro resolve-se eliminando a linha

    Código:
    Else
        tsProdutos.SelectedIndex = 0
    
    e ficando só com o IF desta forma:

    Código:
    If frmMain.lstProdutos.SelectedItems.Count > 0 Then
        tsProdutos.SelectedIndex = frmMain.lstProdutos.SelectedIndex
    End If
    
    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:

    Código:
    tsProdutos.SelectedIndex = frmMain.lstProdutos.SelectedIndex
    
    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 :)
     
  3. tds

    tds Power Member

    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...

    Código:
    frmMain.statusBarProgress1.Value = 25
            MessageBox.Show(dtSet.Tables(bdTables(0)).Rows.Count - 1)
            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)
            Next
            If frmMain.lstProdutos.SelectedItems.Count > 0 Then
                tsProdutos.SelectedIndex = frmMain.lstProdutos.SelectedIndex
            Else
                tsProdutos.SelectedIndex = 0
            End If
    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 []
     
  4. tds

    tds Power Member

    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:
     
  5. PNDmartins

    PNDmartins Power Member

    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.
     
  6. tds

    tds Power Member

    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 :D xD
     
    Última edição: 14 de Abril de 2009
  7. PNDmartins

    PNDmartins Power Member

    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.
     
  8. tds

    tds Power Member

    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. PNDmartins

    PNDmartins Power Member

    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. tds

    tds Power Member

    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:

    ... Quem não tem cão, caça com gato :D isso ou nem sequer caça D: xD
     
  11. PNDmartins

    PNDmartins Power Member

Partilhar esta Página