Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB.net 2010] Da diventar matti

    Ciao a tutti,

    sto diventando matto in questo ambiente. E parlo del Visual Studio 2010. Ho lasciato da parte il buon vecchio VB6 e mi sono gettato a capofitto in questo nuovo ambiente che , pero' , non riesco a domare.
    Vi faccio un esempio. Sto cercando di elaborare un comparatore di quote. Leggo 2 file da web e trasferisco le informazioni in 2 differenti datagridview. E gia' qui problemi a non finire. Non riesco a capire per esempio per quale motivo se provo a leggere in una riga (esistente perche' creata) vuota mi da' un errore e mi chiede di fare una verifica per controllare prima che non sia vuota. Faccio questa verifica e mi da' lo stesso errore ripetendomi la stessa cosa. Ho , come penso in tanti, l'abitudine di mettere dei berakpoint in modo da poter leggere i valori di alcune variabili. Bene, di punto in bianco questo non è piu' possibile perche' , secondo lui , il programma è diverso da quello originale e , quindi, per forzare la cosa devo dire al sistema di farmi un piacere a fare quella cosa.
    Adesso anceh in un semplice ciclo for next o While mi dice delle cose che non stanno ne' in cielo ne' in terra.
    Posto il codice:

    codice:
     Private Sub cercasurecash()         
    Dim sq_bf1 As String, sq_bf2 As String, totrec As Integer, my_mark As String = ""         
    Call leggi_fileconf()         
    totrec = CInt(jj_num.Text)         
    BP_count.Text = "0" : SC_Trov.Text = "0" : tot_gare.Text = "0"         
    numriga_odd = 1          
    DataGridView1.Rows.Clear()         
    DataGridView2.Rows.Clear()         
    DataGridView3.Rows.Clear()         
    Call Cerca_GareBp()         
    Call scarica_sitoBF()         
    While ok_scar <> True         
    '
    End While         
    ok_scar = False         
    Call CercaDatiBF()         
    Dim colonna As Integer = 5         
    Dim riga As Integer = 0               
    While riga < DataGridView1.Rows.Count() - 1             
            Application.DoEvents()             
            BP_count.Text += 1             
            Dim gara As String = DataGridView1.Rows(riga).Cells(colonna).Value.ToString() 
            Dim sq_BP As String() = gara.Split("-")              ' splitto le squadre             
            sq_BP(0) = Trim(sq_BP(0)) : sq_BP(0) = UCase(sq_BP(0))             
            sq_BP(1) = Trim(sq_BP(1)) : sq_BP(1) = UCase(sq_BP(1))             
            For Num_rec As Integer = 1 To totrec                 
                 If sq_BP(0) = Confronto(Num_rec, 2) Then                     
                     sq_bf1 = Confronto(Num_rec, 1)                     
                     Exit For                 
                 End If            
             Next Num_rec            
     For Num_rec As Integer = 1 To totrec                 
    If sq_BP(1) = Confronto(Num_rec, 2) Then                     
    
    sq_bf2 = Confronto(Num_rec, 1)                     
    Exit For                 End If             
    Next Num_rec             
    If (Trova_squadrainBF(sq_BP(0), sq_BP(1), sq_bf1, sq_bf2) = True)
    Then 
    If chk_match.Checked = True Then                     
    Call match_odds(riga, gara)                 
    End If                 
    If chk_15.Checked = True Then                     
    Call uo15(riga, gara)                 
    End If                 
    If chk_25.Checked = True Then                     
    Call uo25(riga, gara)                 
    End If                 
    If chk_35.Checked = True Then                     
    Call uo35(riga, gara)                 
    End If                 
    If chk_Mht.Checked = True Then                     
    Call MatchHT(riga, gara)                 
    End If             
    End If             
    riga = riga + 1         
    End While     
    End Sub
    Quando il valore di riga arriva a 2 mi viene notificato l'errore
    NullReferenceException was unhandled
    Object reference not set to an instance of an object
    L'mmagine che appare punta al carattere 1 di riga = riga + 1
    Non ci sto capendo piu' niente e questa cosa mi manda fuori dai gangheri. Potete aiutarmi?

    Grazie

  2. #2
    VB6 è uscito nell'estate del 1998. Nel 2002 è uscita la prima versione di VB.NET, già allora i programmatori erano in subbuglio perché era evidente che fare il porting dei progetti scritti in VB6 non era proprio una passeggiata... Figuriamoci ora, dopo che sono uscite altre quattro versioni del linguaggio (2003, 2005, 2008, 2010) e altrettante versioni del framework!

    Leggendo il tuo codice, ho la netta impressione che tu abbia tentato di far funzionare in VB2010 quanto scritto in VB6, senza andare tanto per il sottile. Purtroppo per te non solo è cambiato il linguaggio, non solo sono cambiati i controlli a disposizione, ma soprattutto è cambiato (in meglio) lo stile di programmazione. Ecco perché, a mio modo di vedere, spesso si fa prima a riscrivere l'applicazione piuttosto che tentare di "tradurla".

    Poiché non è chiaro quello che vorresti fare (non lo hai affatto spiegato e il tuo codice non è commentato) non ti so dire molto di più.
    Chi non cerca trova.

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536

    Re: [VB.net 2010] Da diventar matti

    Originariamente inviato da gvigliani
    ...

    Quando il valore di riga arriva a 2 mi viene notificato l'errore
    NullReferenceException was unhandled
    Object reference not set to an instance of an object
    L'mmagine che appare punta al carattere 1 di riga = riga + 1
    Non ci sto capendo piu' niente e questa cosa mi manda fuori dai gangheri. Potete aiutarmi?

    Grazie
    ciao,

    premetto che concordo con quanto detto da tas, anche io credo che faresti meglio a scrivere di sana pianta i programmi scritti in vb6, ma sopratutto, a cambiare un po stile e avvicinarti allo stile .net, ma non sono un esperto di vb6, quindi mi limito a darti quello che credo (non è una cosa molto semplice da capire se non commenti il code) sia l'errore che stai commettendo :

    stai usando un DataGridView come se fosse un datatable, e questo secondo me è già un errore, ma l'errore vero e proprio credo che risieda nel fatto che probabilmente lo usi in modalità "EditNewRow" (la proprietà AllowUserToAddRows = true), di conseguenza, ti trovi una riga in più ma vuota, ovvero, l'ultima, in quanto il datagridview ne aggiunge una pronta per essere "compilata" con tutti i campi impostati a valori di default oppure nulli.
    per ovviare a questo problema puoi fare diverse cose, come ad esempio contare 2 righe in meno dal numero restituito da count (una perchè l'indice parte da 0 e una perchè non compilata), ma questo ti porterebbe problemi quando il datagrid è vuoto (solo la riga da modificare, ovvero count = 1 -2, quindi indice negativo).
    Altra soluzione (consigliata) è usare un datatable associato al datagrid, e prendere i valori da li.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.