Vb (2)

stellacometa
Tempo fa lorven mi ha aiutata ad aggiustare una mia codifica riguardante l'estrazione di alcuni numeri casuali..Alla fine sono riuscita ad ottenere un programmino che estraesse consecutivamente, pigiando un pulsante, 90 numeri casuali e che, premendo un'altro pulsante, mi visualizasse in una lista tutti i numeri estratti! Fino qui tutto ok, oggi però mi sono accorta di un piccolo problemino...Se estraggo un tot di numeri poi schiaccio il pulsante per vedere la lista dei numeri estratti allora tutto ok, ma se, una volta vista la lista, ritorno ad estrarre i numeri e apro dinuovo la lista...ebbene appaiono solo i numeri che ho estratto dopo l'ultima visualizzazione della lista mentre gli altri, anche se rimangono memorizzati durante l'applicazione nel vettore, non vengono visualizzati insieme agli altri nella lista.

Quindi...se io estraggo tutti i numeri e poi SOLO alla fine visualizzo la lista, allora i numeri ci sono tutti, ma se durante l'estrazione vado a visionare la vista più volte allora i numeri non appaiono tutti insieme ma solo quelli estratti dopo l'ultima visualizzazione..

Come posso sistemare???

Spero di essermi saputa spiegare!
Grazie :wink:

Risposte
lorven
Posta il tuo programma.

stellacometa
Dim vett(totnumeri) As Integer
Dim n As Integer


Private Sub Command2_Click()
Form2.Show
Unload Me
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub Form_load()
n = 0
Randomize
End Sub

Private Sub Command1_Click()

    numero_ok = False
    Do Until numero_ok = True
    
        numero_estratto = min + Int((max - min + 1) * Rnd)
        numero_ok = True
                
        For i = 1 To n
                    
            If numero_estratto = vett(i) Then
               numero_ok = False
               Exit For
            End If
            
        Next
    
    Loop
      
    n = n + 1
    vett(n) = numero_estratto
    Text1.Text = ""
    Text1.Text = CStr(numero_estratto)
    Form2.List1.AddItem CStr(numero_estratto)
End Sub

lorven
Se ho capito bene l'organizzazione del tuo programma, hai un Form1 con 3 CommandButton:

1- ESTRAI (per estrarre un nuovo numero)
2- VISUALIZZA (per visualizzare i numeri già estratti)
3- FINE (fine programma)

e un Form2 con un CommandButton:
ESCI- per tornare in Form1 e continuare, dopo aver controllato i numeri già estratti.

In questo caso, non bisogna usare Unload Me per uscire da Form2, perchè resetterebbe il ListBox Form2.List1.
Io ho fatto così. In Form1 (con 3 CommandButton e un TextBox):
Const totnumeri As Integer = 90
Const min = 1, max = 90

Dim vett(totnumeri) As Integer
Dim n As Integer

Private Sub Command2_Click()
Form1.Visible = False
Form2.Show
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub Form_load()
n = 0
Randomize
End Sub

Private Sub Command1_Click()

    numero_ok = False
    Do Until numero_ok = True
   
        numero_estratto = min + Int((max - min + 1) * Rnd)
        numero_ok = True
               
        For i = 1 To n
                   
            If numero_estratto = vett(i) Then
               numero_ok = False
               Exit For
            End If
           
        Next
   
    Loop
     
    n = n + 1
    vett(n) = numero_estratto
    Text1.Text = ""
    Text1.Text = CStr(numero_estratto)
    Form2.List1.AddItem CStr(numero_estratto)
End Sub



In Form2 (con un ListBox e un CommandButton):

Private Sub Command1_Click()
Form2.Visible = False
Form1.Show
End Sub


Sperando funzioni secondo le tue attese, ciao! :D
P.s. : se ci giochi al superenalotto, al lotto o anche alla tombola, esigo la percentuale sulle vincite! :-D

stellacometa
Ehehehehe...certo certo... :-D :-D

In effetti l'obbiettivo era quello!!

A quanto ho capito al collegamento rendi invisibile il form precedente..bene!! Non ci avevo pensato...Grazie..

Emh..ora avrei una domandina ina ina più complicatina ina ina...

Allora...se io mi creo un menù nel primo form con varie voci tra cui anche salva..come lo imposto? Lo chiedo perchè so fare il menù ma non so collegare il salvataggio! Mi spiego meglio..apro la finestrella del menu scelgo salva, do un nome, scelgo dove salvarlo, salvo!! Così che posso riaprire l'applicaizione anche se la chiudo partendo dal punto in cui ho lasciato!!!

Grazie lorven..ti dovrei fare na statua a te!!! :D

lorven
Mò vuoi pure interrompere la tombola e riprenderla dopo (così puoi cambiare i numeri già estratti!) :shock: :!:
La risposta quando studierete i file ;-)

stellacometa
Nooooo daiiii..La scuola è già finita!!!

Non posso rimanere con questa curiosità....

Tanto l'estrazione della tombola è stata pure all'incirca una mia curiosità!!!

TI PREEEGOOOOO...Solo qualche indizio!!!!

lorven
Stella, l'argomento che ti interessa non è semplicissimo, se si parte da zero; richiede un po' di tempo.
Credo sia inutile postarti direttamente una soluzione. Cercando velocemente qualche guida in internet sui files in VB,
il meglio che ho trovato è questo:
http://www.cplusplus.it/VisualBasic/Pag ... /Files.htm
Vedi se può esserti utile; se non lo fosse, cercherò meglio.
:-)

antonio89x
Dovresti guardare dinuovo la guida che ti ho inviato tempo fa... quella sull'utilizzo dei filesystem object

lorven
Stella tace... :( forse è rimasta un po' male perchè non soddisfatta della sua legittima curiosità.
Allora postiamo una semplicissima soluzione per salvare e riprendere la tombola!
Const totnumeri As Integer = 90
Const min = 1, max = 90
Const nfile = "TG_001.txt"
Dim vett(totnumeri) As Integer
Dim n As Integer


Private Sub Command2_Click()
Form1.Visible = False
Form2.Show
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub Command4_Click()
Dim k As Integer
Open nfile For Output As 1
For k = 1 To n
    Print #1, CStr(vett(k))
Next
Close 1
    
End Sub

Private Sub Command5_Click()
Dim Riga As String
Open nfile For Input As 1
Form2.List1.Clear
n = 0
Do Until EOF(1)
   Line Input #1, Riga
   Form2.List1.AddItem Riga
   n = n + 1
   vett(n) = CInt(Riga)
Loop
Text1.Text = Riga
Close 1
End Sub

Private Sub Form_load()
n = 0
Randomize
End Sub

Private Sub Command1_Click()
If n < max - min + 1 Then
    numero_ok = False
    Do Until numero_ok = True
    
        numero_estratto = min + Int((max - min + 1) * Rnd)
        numero_ok = True
               
        For i = 1 To n
                   
            If numero_estratto = vett(i) Then
               numero_ok = False
               Exit For
            End If
           
        Next
   
    Loop
     
    n = n + 1
    vett(n) = numero_estratto
    Text1.Text = CStr(numero_estratto)
    Form2.List1.AddItem CStr(numero_estratto)
    Else
         MsgBox ("non ci sono più numeri da estrarre")
         Beep
End If
         
End Sub



Invito a rendere meno spartana la gestione del save&resume.
p.s.: non è più possibile estrarre un 91.mo numero e così non va più in loop. ;-)

:-)

stellacometa
Ehy lorven..tranquillo..non ci sono rimasta male...è che mi sto solo ricollegando ora perchè ieri ho staccato per cercare alcune informazioni sul mio libro ma senza risultati...Ti ringrazio per il link e la codifica..credo che come prima cosa guarderò il link così ti faccio sapere cosa ne ho capito!!! Grazie un miliardo... :-D

stellacometa
WoooooW....non sembra difficile però mi sa che mi devo anche andare a dare un occhiata a cosa siano i record e il loro utilizzo!!

Che impresa che mi sono messa sulle spalle..però se non rispondo a sta curisità sarà peggio...

Grazie mille lorven...cercherò di imparare queste cose e poi mi rivedo meglio la codifica che mi hai postato perchè vista così a primo impatto mi fa un pò di confusione!!

Grazie ancora prof lorven!!! :-D

stellacometa
Allora...dopo tanto googlogare e studiacchiare qua e la ho imparato a salvare un file di testo...Ad esempio, ho un'applicazione con una textbox e due bottoni e scrivo questo codice:

Private Sub Command1_Click() 
Text1.Text = "" 
On Error GoTo fine 
Open App.Path & "\testo.txt" For Input As 1 
Do 
Input #1, linea 
Text1.Text = Text1 & linea & vbCrLf 
Loop Until EOF(1) = True 
Close #1 

Exit Sub 
fine: 
Close #1 
MsgBox Err.Description 
End Sub 


Questo bottone mi carica il file salvato!

Private Sub Command2_Click() 
On Error GoTo fine 
Open App.Path & "\testo.txt" For Output As #1 
Print #1, Text1.Text 
Close #1 

Exit Sub 
fine: 
Close #1 
MsgBox Err.Description 
End Sub 


Questa me lo salva!!!

Ora capisco meglio il codice di lorven..MAAAAAAAAAA.....

Ho riscontrato che l'applicazione salva solo un file per volta e che una volta che ne salvo uno nuovo cancella il precedente!!! Come si fa per salvare più file e poi appena schiccio il Command2 scelgo quello che voglio aprire??

lorven
Era una delle modifiche che invitavo ad apportare!

stellacometa
mmmmh...allora ci devo arrivare io...Bella sfida!!!
Sono riuscita ad imparare questo...riuscirò anche a salvare più di un file! SPERO!!! :D

lorven
Hai comunque fatto un buon lavoro, complimenti. Prova a fare da sola il resto.
Un aiutino: usa il controllo FileListBox. :D

stellacometa
Grazie grazie... un passo alla volta e si arriva in alto..

Appena riesco in quest'ultimo punto posto i risultati!!!

stellacometa
Aaaaaaaaaaaaaallora!!!

Ho fatto un'altro passettino avanti..vediamo se sono sulla buona strada per salvare i file di testo!!!
Ho un form con un bottone e una CommonDialog.

Per salvare associo al pulsante il codice:

CommonDialog1.Filter = "Text Files|*.txt"
CommonDialog1.ShowSave
NomeDelTesto = CommonDialog1.FileName
Open NomeDelTesto For Output As #1
Print #1, Text1
Close #1

Così mi salvo un file di testo!!

Che bello!! Ci sono riuscita vero?
Ma ci sono altri modi?

lorven
:!: :shock:
Bel lavoro. Chiaramente, anche per riprendere un'estrazione interrotta e salvata su file, si può utilizzare il CommonDialog.
Hai adottato il metodo migliore. E io volevo farti usare FileListBox, DirListBox e DriveListBox! :lol:

Volendo fare i pignoli, bisognerebbe chiedere conferma, in fase di salvataggio, nel caso di tentata sovrascrittura di un file già presente.

Vedo che scrivi tutto con un'unica Print. OK, ma fa' attenzione: quando si aprono file relativi ad estrazioni precedenti, non si deve consentire, proseguendo il gioco, l'estrazione di numeri già usciti e presenti sul file.
:-)

stellacometa
Già...hai ragione; però per il programma dell'estrazione ancora non ho inserito il salvataggio perchè prima ho voluto imparare come si fa!

In merito a quel programma dell'estrazione però entro un pò in crisi perchè i file che salvo sono di testo e si aprono con il programma Blocco Note, quindi per ora non so come fare per riaprire l'applicazione salvata e continuare ad estrarre i numeri restanti.

Ma cercherò di ragionarci un pò su!

TomSawyer1
Ci sono altri modi. Il più carino (secondo me) è usando il FileSystemObject (FSO). Se ti interessa...

E con FSO mi sa che puoi rirsolvere anche l'ultimo tuo problema (che non ho ben capito):

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.