TextBox

giovedì 28 gennaio 2010 - 14.41

Alexia Profilo | Newbie

Buon Giorno Ragazzi... Sono sempre nelle canne
ho una form con 10 textbox.... di cui gli faccio generare dei numeri.....
come posso fare a farle riconoscere nel momento in qui le due text hanno lo stesso numero, darle il comando di aumentare di uno.....
e cosi facendo le altre text dovrebbero diventare una diversa dall'altra?? Giusto??

Anticipatamente..... Grazie Ragazzi

P.S. Vb 2008 express

AntCiar Profilo | Expert

Ciao.

Dal tuo post non è tanto chiaro quello che vuoi ottentere.
Cristian Barca

Alexia Profilo | Newbie

Sorry..... ediamo se riesco a farmi capire.....
sto provando a fare un programmino al mio Amico che è impallato con il WinForLive....
io ho messo
Dim nur As Random
Dim pp As Integer
Dim lip As Integer
nur = New Random
pp = nur.Next(1, 3)
lip = nur.Next(2, 5)

TextBox1.Text = pp
TextBox2.Text = lip

questo si ripete per 10 textbox....
se invece hai un modo per far si che mi tira fuori 10 numeri su 20, non uguali?!!!

Grazie :-))

AntCiar Profilo | Expert

Ciao

Metti il codice che segue nell'evento click di un bottone della form dove sono presenti le 10 TextBox.
Spero sia quello che stai cercando.

Ciao ciao



''Inizializzo il generatore di numeriCasuali
Dim rnd As Random = New Random(DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond)
''Inizializzo il contenitore di confronto
Dim numEstratti As List(Of Integer) = New List(Of Integer)
Dim numCor As Integer = 0


While numEstratti.Count < 10
numCor = rnd.Next(1, 21)
If (Not numEstratti.Contains(numCor)) Then
numEstratti.Add(numCor)
End If
End While

numEstratti.Sort()
If numEstratti.Contains(21) Then
MsgBox(21)
End If

''Scrivo i numeri estratti nelle textBox

Me.TextBox1.Text = numEstratti(0).ToString()
Me.TextBox2.Text = numEstratti(1).ToString()
Me.TextBox3.Text = numEstratti(2).ToString()
Me.TextBox4.Text = numEstratti(3).ToString()
Me.TextBox5.Text = numEstratti(4).ToString()
Me.TextBox6.Text = numEstratti(5).ToString()
Me.TextBox7.Text = numEstratti(6).ToString()
Me.TextBox8.Text = numEstratti(7).ToString()
Me.TextBox9.Text = numEstratti(8).ToString()
Me.TextBox10.Text = numEstratti(9).ToString()
Cristian Barca

Alexia Profilo | Newbie


Si.............
ma Come Cavolo potro mai imparare tutti sti diamine di codici e cose
''Inizializzo il generatore di numeriCasuali
Dim rnd As Random = New Random(DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond)<--mi spieghi xpiacere 3 cose? qui cosa centra la parola Data minuti secondi e milliS.

''Inizializzo il contenitore di confronto <- - - - questo? cosa fa? mette a confronto le text??
Dim numEstratti As List(Of Integer) = New List(Of Integer)
Dim numCor As Integer = 0

While numEstratti.Count < 10 <----------- xche scusa si usa while?? che significato "funzione" ha questo "while" e il resto del codice cosa sviluppa??
numCor = rnd.Next(1, 21)
If (Not numEstratti.Contains(numCor)) Then
numEstratti.Add(numCor)
End If
End While

numEstratti.Sort()
If numEstratti.Contains(21) Then
MsgBox(21)
End If
P.S. sono domande che faccio xche sono veramente alla base "anche più sotto"...
e te Le chiedo xche voglio capire o x lo - provare....
Sei Stato Spettacolare te ne sono Infinitamente Grata....
se non puoi per motivi di tempo non ti preoccupare per la spiegazione!!
di nuovo Mille Grazie.... Grazie.... Grazie.... Grazie.... Grazie....




Alexia Profilo | Newbie

Scusami........
Grazie per la Tempestività.......
Grazie

AntCiar Profilo | Expert

Ciao. Ti do un po di spiegazioni:

'Inizializzo il generatore di numeriCasuali
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

La classe Random è quella che genera i numeri casuali. Quando viene inizializzata ha bisogno di un numero di partenza detto "seme" da cui partire per la generazione dei numeri casuali. Ho utilizzato i minuti, secondi e millisecondi correnti (sommati) di modo che ogni volta che inizializzi la Random sicuramente la inizializzerai con un numero diverso.


''Inizializzo il contenitore di confronto Dim numEstratti As List(Of Integer) = New List(Of Integer)

La classe List è una particolare classe unidimensionale tipizzata. In parole povere è un contenitore di oggetti di tipo X. Nel caso nostro rappresenta un contenitore di oggetti di tipo 'integer'. Questa classe è comoda perchè ha un metodo che ti permette di sapere se un oggetto è già presente o no nella lista. Questo perchè nella lista non è possibile avere oggetti uguali.

Dim numCor As Integer = 0
Dichiarazione di una semplice variabile intera utilizzata come appoggio.

While numEstratti.Count < 10

Utilizzo un ciclo 'while' perchè non so apriori quante iterazioni dovrò effettuare. Tradotto in parole povere vuol dire "fino a che in 'numEstratti' ci sono meno di 10 elementi esegui quello che c'è nel blocco while. Quando poi arrivi ad aggiungere il 10mo elemento esci dal ciclo". Utilizzo questo tipo di approccio perchè la classe Random dando numeri casuali potrebbe generarmi più volte lo stesso numero.


numCor = rnd.Next(1, 21)
Richiedo alla classe Random di generarmi un numero compreso tra 1 e 20 e lo appoggio nella variabile 'numCor'

If (Not numEstratti.Contains(numCor)) Then
Controllo se il valore di 'numCor' non è già presente nella lista di interi. Nel caso in cui non c'è eseguo la riga successiva altrimenti (numero già estratto in precedenza) l'esecuzione riprende dalla valutazione 'While numEstratti.Count < 10' e quindi estraggo un nuovo numero e così proseguo fino a che numEstratti arriva a contenere 10 elementi.

numEstratti.Add(numCor)
Aggiungo il numero presente nella variabile 'numCor' nella lista.

End If
End While

numEstratti.Sort()
Effettuo l'ordinamento degli elementi all'interno della lista. Questo perchè la classe random mi genera i numeri a casaccio tra 1 e 20 e quando li metto nella lista rimangono nell'ordine con cui vengono inseriti. Ad esempio posso avere questa situazione 5, 15, 2,1,20,19,18,4, 6,8. invocando il Sort() mi ordina progressivamente i numeri. Niente di più.

Il pezzo di codice che segue non serve a niente
Era solo di controllo per vedere se era presente anche il numero 21.
mi sono dimenticato di toglierlo dopo i test
If numEstratti.Contains(21) Then MsgBox(21) End If

''Scrivo i numeri estratti nelle textBox

Associo ad ogni textbox i valori prelevati nella lista di interi. Per accedere all'elemento specifico occorre dare un indice a base zero. Elemento 1 nella posizione 0, elemento 2 nella posizione 1 etc...

Me.TextBox1.Text = numEstratti(0).ToString() Me.TextBox2.Text = numEstratti(1).ToString() Me.TextBox3.Text = numEstratti(2).ToString() Me.TextBox4.Text = numEstratti(3).ToString() Me.TextBox5.Text = numEstratti(4).ToString() Me.TextBox6.Text = numEstratti(5).ToString() Me.TextBox7.Text = numEstratti(6).ToString() Me.TextBox8.Text = numEstratti(7).ToString() Me.TextBox9.Text = numEstratti(8).ToString() Me.TextBox10.Text = numEstratti(9).ToString()


Spero abbia "allargato" un po la tua conoscenza
Cristian Barca

Alexia Profilo | Newbie

Grazie Molto Gentile
ora me lo stampo e poi me lo leggo con calma
Grandissimo..... Grazie Infinite per il Tempo dedicatomi.....

Jeremy Profilo | Guru

Ciao Christian.
Non entro nel merito del codice ..... sicuramente funzionante ..... ma mi permetto di aggiungere un particolare ...
questa parte di codice:
Me.TextBox1.Text = numEstratti(0).ToString() Me.TextBox2.Text = numEstratti(1).ToString() Me.TextBox3.Text = numEstratti(2).ToString() Me.TextBox4.Text = numEstratti(3).ToString() Me.TextBox5.Text = numEstratti(4).ToString() Me.TextBox6.Text = numEstratti(5).ToString() Me.TextBox7.Text = numEstratti(6).ToString() Me.TextBox8.Text = numEstratti(7).ToString() Me.TextBox9.Text = numEstratti(8).ToString() Me.TextBox10.Text = numEstratti(9).ToString()

potrebbe diventare semplicemente ...
For Each txt As TextBox In Me.Controls txt.Text = numEstratti(Me.Controls.IndexOf(txt)) Next

che ne dici?

Ciao

Alexia Profilo | Newbie

Ciao Jeremy...... eccomi un Salutone anche a Christian.... Super Gentilissimi.....
For Each txt As TextBox In Me.Controls
txt.Text = numEstratti(Me.Controls.IndexOf(txt))
Next
Questa parte di codice deve sostituire tutto il codice delle textbox1, 2, 3, 4, 5 etc etc???
io però nella form ho altre textbox che non devono accettare i numeri..... se cosi fosse con questo codice, andrebbe a vedere anche le text che fanno tutt'altro???

Scusatemi Figlioli ma sono una Capra

Jeremy Profilo | Guru

>Questa parte di codice deve sostituire tutto il codice delle textbox1, 2, 3, 4, 5 etc etc???
Si
>io però nella form ho altre textbox che non devono accettare i numeri..... se cosi fosse con questo codice, andrebbe a vedere anche le text che fanno tutt'altro???
Ehm .... si..... A questo non avevo pensato ..... ma puoi sempre inserire le textbox(quelle dei numeri estratti in un GroupBox chiamato gbEstrazioni e riscrivere il codice in questo modo
For Each cnt As Control In Me.Controls If TypeOf cnt Is GroupBox Then Dim gb As GroupBox = CType(cnt, GroupBox) If gb.Name = "gbEstrazioni" Then For Each txt As TextBox In gb.Controls txt.Text = numEstratti(Me.Controls.IndexOf(txt)) Next End If End If Next
Facci sapere...
Ciao

Alexia Profilo | Newbie

Scusami Jeremy..... non volevo essere ne pesante ne invadente..... il libro l'ho gia preso... ne ho anche 3 di libri che dicono di essere facilissimi ma quando hai finito di leggere non c'hai capito un bel niente.... purtroppo non basta un libro per capire tutte quelle istruzioni.... cmnq Grazie di Tutto....
appena mi servirà una mano Vi chiedero senza spiegazioni......

AntCiar Profilo | Expert

Ciao Alexia. Volevo ricordarti di chiudere questo thread quando hai risolto il problema per cui hai scritto il post. Non è per pignoleria o altro ma è solo per una questione di correttezza delle regole del forum. Lasciare thread aperti comporta perdita di tempo da parte di utenti.

Ciao ciao
Cristian Barca

Alexia Profilo | Newbie

Ok! Scusate.... lo chiudo... xò se posso farVi un altra domanda inerente sempre a questa parte di codice...
ogni momento x me è un dilemma....
io dopo aver messo quel codice che inserisce numeri univoci avrei bisogno se mi fate un esempio di select case.... qui vi incollo parte del codice inserito da Cristian
cosi forse riesco a spiegarmi meglio.....

Me.TextBox3.Text = numEstratti(0).ToString()
Me.TextBox4.Text = numEstratti(1).ToString()
Me.TextBox5.Text = numEstratti(2).ToString()
Me.TextBox6.Text = numEstratti(3).ToString()
Me.TextBox7.Text = numEstratti(4).ToString()
Me.TextBox8.Text = numEstratti(5).ToString()
Me.TextBox9.Text = numEstratti(6).ToString()
Me.TextBox10.Text = numEstratti(7).ToString()
Me.TextBox11.Text = numEstratti(8).ToString()
Me.TextBox12.Text = numEstratti(9).ToString()
Dim prova As Integer = (TextBox3.Text)
Select Case prova
Case "1"
OvalShape1.FillColor = Color.Cyan
Case Else
OvalShape1.FillColor = Color.White
end select......... ora io vorrei "" che ovalshape1 vedesse tutte le text dove esce il N°1 cosi ché cambia colore come dev'essere impostato? dim prova as integer = (textbox1...text2?? e via dicendo?? e questo poi lo ripeterei x tutti gli altri Oval2, 3, 4,....
io ho postato qui questa domanda giusto xche è "" il continuo del codice... ma se ho sbagliato Scusatemi Tanto...
Grazie di Tutto

Alexia Profilo | Newbie

Siate cosi Gentili da indicarmi come chiudere il thread!
Grazie.....

AntCiar Profilo | Expert

Allora: per chiudere il thread basta che accetti una delle nostre risposte tramite il bottone che compare nel riquadro delle nostre risposte sulla destra.

2: se ho capito bene tu vorresti fare questo: definisci 20 colori, uno per ogni numero (es 1 = bianco, 2 verde, 3 = rosso, 4 = giallo....... etc). Poi per ogni textBox, a seconda del numero che gli è stato attribuito dall'estrazione, associ alla OvalShape corrispondente il colore associato al numero.

Fammi sapere se è così.

Ciao
Cristian Barca

Alexia Profilo | Newbie

Grazie Cristian.....
per chiudere ho capito....))
le 20 Ovalshape si colorano tutte di azzurro... se ci clicco diventa azzurra, e se ci ri clicco ritorna white...
quella soluzione che mi hai Fornito Tu che genera 10 numeri in dieci textbox, io vorrei "" che oval1 se vede il numero uno in una text qualsiasi lei si colora.. e questo vale anche x le altre... che sò! l'Ovalshape8 se vede una text con il numero 8 si colori

io provavo con select case come quello messo sopra, e che ti ri incollo quì...
sul button1_click... etc
Dim prova As Integer "tutte le text presenti nella form" = (TextBox1.text "A" Text textbox10)<--- fare in modo che sul click l'Oval "qualunque sia" controlli il N° di tutte le text

Case "1"
OvalShape1.FillColor = Color.Cyan
Case Else
OvalShape1.FillColor = Color.White

Case "2"
OvalShape2.FillColor = Color.Cyan
Case Else
OvalShape2.FillColor = Color.White

Spero di Essermi spiegata nel migliore dei modi Grazie...)

P.S. ora vado a chiudere l'altro...)










AntCiar Profilo | Expert

Ciao.

Allora. Non conosco cosa sono le OvalShaper perchè in VS2005 non ci sono. Presumo siano delle label di forma circolare e tu ne hai usate 20 rappresentanti i 20 numeri del WinForLife.

Allora fai in questo modo:

metti tutte le tue ovalshape dentro un panel o in una groupbox. Dai come nome alle ovalShape nomi di tipo ov1, ov2, ov3 etc...

Fai un ciclo sui controlli del Panel o groupBox (a seconda di quello usato) come suggerito in precedenza da Jeremy (ovviamente adattando il codice alle ovalShape

poi in una variabile stringa ti memorizzi il nome della ovalshape che stai ciclando.
poi scrivi: 'variabile' = 'variabile'.Reolace("ov","")

poi vedi il codice che utilizzo io per controllare se il numero è presente nella lista e fai:

if 'oggettoLista'.Contains(cint( 'variabile')) then
''Colora la shape corrente con il colore blu
else
''Colora la shape corrente con il colore bianco
end if

PS dove uso termini come 'variabile', 'oggettoLista' devi sostituirli con i nomi delle tue variabili

ti butto qua un po di codice
(le oval shape devono stare in un GroupBox chiamato 'groupBox2'. Tutte le oval shape devono chiamarsi 'ov1, ov2, ov3, ov4 etc)

Dim nomeShape As String = ""
For Each ovl As OvalShape In Me.groupBox2.Controls
nomeShape = ovl.Name.Replace("ov", "").Trim()
If numEstratti.Contains(CInt(nomeShape)) Then
ovl.fillColor = Color.Blue
Else
ovl.fillColor = Color.White
End If
Next


Cristian Barca

Alexia Profilo | Newbie

Sei Stato Gentilissimo nel mettermi a disposizione un pezzo di codice di spunto per via che non ne sarei mai venuta a capo
in quanto all'Ovalshape si è nel 2008 ed è proprio quello che mi hai detto Tu c'è quello per i rettangoli, ovali e linee...

Mille Grazzissssimeeee

P.S..... volevo precisare una cosa sola: sono molto impedita con sto vb a differenza in vba che ho fatto un piacere ad un mio amico fornendole un programma fatto in excel che ancora tutt'ora ci sta gestendo la sua azienda..... se hai due minuti da perdere vedrai su youtube il lavoro che ho fatto sotto alexia8520... e l'ho fatto senza aiuti in nessun forum solo qualche libro e rubacchiato li e la su internet.... e xciò che mi trovo in questa situazione che mi sono immersa nel vb2008 convinta che sarebbe stato molto più semplice che in vba... sbagliavo ...

ora mi metto dietro a provare a mettere insieme il tutto.... di Nuovo Mille G R A Z I E....

AntCiar Profilo | Expert

Ciao Alexia. Guarderò il tuo lavoro su youtube.

Con VBA avrai fatto molte cose. Posso dirti che con la piattaforma NET (indipendentemente dal linguaggio VB, C#, VJ++) farai cose che con il VBA te le sogni. Iniza a piccoli passi e vedrai che ti si aprirà un mondo fantastico. Ti sconsiglio invece di tentare a convertire il tuo progetto VBA in NET perchè tenderesti ad applicare lo stesso approccio usato oppure cercerai di far fare ai componenti di NET le stesse cose fatte in VBA. Inizia tutto da 0 e un po con il nostro aiuto, un po con la ricerca su internet e con tanto lavoro di logica riuscirai nel tuo intento.

Ti auguro un buon lavoro!!!!!

Ciao
Cristian Barca

Alexia Profilo | Newbie

Ciao Cristian mi vergogno non sai quanto a romperTi l'Anima.... chiedo a Te anche xche se ri spiego il tutto a qualcun'altro dall'inizo, mi uccide...
ho provato in tutti i modi a fare c'ho che mi hai detto ma non c'è stato verso.... partendo dall fatto che le textbox sono fuori dal groupbox.. x via che oramai ho lasciato come mi avevi poostato Tu... ho visto che funzionava e avevo paura di sbagliare... cmnq il suggerimento di Jeremy l'ho tenuto come del resto tutte le altre soluzioni che mi date. le salvo cosi ché mi serviranno x un futuro....

Dim nomeShape As String = "" <--- qui io presumevo che dove c'è nomeShape sia: ov1
For Each ovl As OvalShape In Me.groupBox1.Controls <--- qui è dove riscontro l'errore.. cioè dopo AS: ovalshape mi dice 'tip ovalshape non definito' ho messo anche ov1 e ovl
ma niente sempre lo stesso errore....
nomeShape = ovl.Name.Replace("ov", "").Trim() <--- qui nomeshape ho messo ov1... e altre prove ma nulla sopra l'errore non sparisce...
If numEstratti.Contains(CInt(nomeShape)) Then <-- qui invariato xche numestratti si ri fa al codice messo x l'estrazione dei numeri univoci.. e nomeshape: ov1
ovl.fillColor = Color.Blue <--- qui ho provato a mettere anche ov1 come si chiama la ovalshape.. e uguale lasciando ovl....
Else
ovl.fillColor = Color.White <---- e qui
End If
Next
il tutto è dentro l'evento Click dell'estrazione.. presumo sia giusto.. xche una volta cliccato sul Button per generare numeri la ov1 deve vedere se in una textbox qualunque ci sia il numero 1... e se risulta esserci lei si colora.. oppure rimane white....
P.S. lo so che appena leggerai Alexia ti verra la pelle 'oca... farai un espressione del genere ....
ma sono veramente alle prime armi e purtroppo non riesco a tirarmici fuori.... non me ne volete...
Grazie Mille

Alexia Profilo | Newbie

If TextBox3.Text = 1 Then
ovl1.FillColor = Color.Cyan
Else
ovl1.FillColor = Color.White
End If
If TextBox3.Text = 2 Then
OvalShape2.FillColor = Color.Cyan
Else
OvalShape2.FillColor = Color.White

If TextBox4.Text = 2 Then
OvalShape2.FillColor = Color.Cyan
Else
OvalShape2.FillColor = Color.White
End If
End If

questo è quanto ciò riesco a fare.... e purtroppo so che sarà una lista infinita di if else perché dovro ripeterla per utte le oval e man mano che vado avanti dovro aggiungere piu if per text perche ad esempio il sei potra uscire su più text... a diversita della prima che l'1 esce solo sulla prima e il 2 o sulla prima o sulla seconda... ma gia la il tre può uscire sulla prima seconda e terza... e via dicendo.... vabbè terrò questo codice...... che è meglio...
un Mega Grazie lo stesso.... Bye Bye

AntCiar Profilo | Expert

Ciao Alexia. Non ti preoccupare.

allora l'errore che ti da sulla definizione del For Each è perchè il tipo specificato non è corretto. Come ti dicevo in VS2005 non esiste l'OvalShape e quindi non so di che tipo è. Fai una cosa in progettazione della form in un qualsiasi evento scrivi 'me.ov1.fillcolor = color.white' poi passa con il mouse sopra 'ov1' e nella tooltip che compare leggi il tipo di oggetto. Ad esepio se lo fai su textbox1.text ti dirà "textBox1 as System.Windows.Form.TextBox". La parte che a te serve è quella dopo l'AS o in generale quella a destra. con questa parte la inserisci le tuo forEach

For Each ovl As System................ IN me.GroupBox2.Controls

Per far funzionare il tutto devi avere tutte le 20 ovalShape in un unico contenitore. puoi essere un panel control oppure in groupBox control. Questo perchè se ci sono anche altri controlli ti va in errore. Quando infatti scrivi
"For Each ovl As System................ IN me.GroupBox2.Controls" stai a dire "per ogni controllo di tipo OvalShape che si trova nel contenitore GroupBox2...." quindi se poi nel contenitore ci metti anche altro va in errore perchè non è di tipo ovalshape.

Prova e fammi sapere.
PS. e non farti problemi a chiedere. Se è nelle mie possibilità rispondere lo faccio volentieri perchè anche io all'inizio (circa 7 anni fa) mi sono trovato nella tua stessa situazione.

Ciao ciao



Cristian Barca

Alexia Profilo | Newbie

Scusami Cristian.... Mille Scuse....
avendo impostato il Threads come Chiuso non avrei mai pensato che mi rispondevi...
Ti Ringrazio per tutto l'Aiuto che mi hai dato e per il tuo tempo che perdi nel scrivermi tutte le spiegazioni
Sei Veramente Gentilissimo.... ne farò Tesoro :-) mi sono salvata tutto e me lo sono letto e ri letto...
ti posso disturbare ancora un attimo???
riguardo sempre per i numeri estratti a caso "" ho visto come mi hai spiegato EGREGGIAMENTE che i numeri cambiano ogni qualvolta xche si basa sull'orario?? Giusto?!!!! e i millisecondi...
ora non so se sai come funziona il superenalotto??? somma sono pannelli da 6 n°...ok!
Allora tenendo presente che se io gli facessi tirare su i N° su 12 text mi verrebbero fuori ES: dall'1 al 90 ma io vorrei "" fare che ogni sei è da 1 a 90...
io ho fatto così: mouse down Code... Mouseup Code... cosi ché mi fa due estrazioni distinte.... cosi mi coprela prima estrazione al down e la seconda all'Up... ora viene il bello
se invece volessi fare x 5 pannelli???? non ce le ho tutte quelle funzioni sul mouse muove salta ride canta
allora ho messo 3 Cmd che fanno le altre estrazioni... ora come posso fare che al click del Cmd1 (down-up non c'è problema) mi fa partire anche Cmd2 Cmd3 Cmd4???
cioè simula il click di tutti i Cmd.... anche se Tu hai un codice per risolvere il tutto solo anche con il Cmd1, mi puoi spiegare se è possibile simulare questa funzioe?? (click2 3 4)
G R A Z I E :-)
se Fossero tutti come Te non Vendono più libri :-)

P.S. riguardo a quel for Each etc... mi sono un pò perso.... ma anche nell'altro forum mi sa che sono andati un pò in bratta e xciò questo mi rincuora ad non aver capito....
ho chiesto ad altri non perche non mi hai spiegato B E N E ma xche mi vergogno abusare della Tua Gentilezza un Mega GRAZIE

AntCiar Profilo | Expert

Ciao Alexia.

Da come ho capito sull'evento MouseDown hai inserito del codice per l'estrazione dei 6 numeri su 90. Poi sull'evento MouseUp hai reinserito il codice per l'estrazione di altri 6 numeri su 90.

Se hai fatto in questo modo sei fuori strada. Il tuo ragionamento è di tipo "Procedurale" mentre dovresti orietare l'attenzione verso la programmazione a "oggetti". Ti faccio un piccolo esempio: "hai un bimbo a cui prima chiedi se ha fame, e se ti risponde si gli dai la merendina". Quello a cui devi arrivare è fare in modo di dire al bimbo "prendi tu la merendina se hai fame". Può sembrare una caz....ta ma è il pensiero della programmazione a oggetti.

Calando l'edempio fatto al tuo problema prova a ragionare in questo modo: invece di mettere N volte il codice per l'estrazione dei numeri sotto ogni evento, crea una funzione che ti estrae 6 numeri su 90. Poi richiama in un ciclo N volte la funzione per quante estrazioni vuoi ottenere. Con il materiale che hai a disposizione in questo thread riuscirai nella tua impresa.


Cristian Barca

Alexia Profilo | Newbie

Ci Proverò.....
anche se mi ci sono già più che scervellata.... ma ce la metto ancor di piu se mi dici che la soluzione è dentro al forum
xò.... mi spieghi cosa vuol dire Programmazione a oggetti???
non avanzo nessun tipo di commento onde evitare di fare figuracce :-) mi sono documentata in questo ma se hai una spiegazione del tipo terra a terra.....
proprio in 2 parole e modi scimmia :-))
Sei un Grande per la Tempistica :-)
non finirò Mai di RingraziarTi :-)
ti farò sapere

AntCiar Profilo | Expert

con parole "terra terra" vuo dire definire un modello di oggetto che presenta delle proprietà, dei metodi e degli eventi e utilizzarlo astraendosi da come effettivamente funziona. E' più facile farlo che spiegarlo. Appena ho un po di tempo ti faccio un esempio di programmazione a oggetti.
Cristian Barca

Alexia Profilo | Newbie

ho sudato nel leggerlo
Tranquillo G R A Z I E

Alexia Profilo | Newbie

"Fatto" :-)) :-)
dim rnd as random etc <--- questo riman invariato "unico"
dim numEstratti as list etc <--- qui ne ho aggiunto uno sotto
dim numEstratt as list etc <--- senza i finale per cambiare
Dim numCor As Integer = 0
Dim numCori As Integer = 0 <---- i finale
io ora qui ho messo un radiobutton xche mi serve per generare o 2 colonne o 5 colonne....
if rdb1.checked = true then
While numEstratti.Count < 6
While numEstratt.Count < 6
[code]numEstratti.Add(numCor)
numEstratt.Add(numCor)
numEstratti da 0 a 5per le sei textbox...
numEstratt da 0 a 5 le altre 6 textbox...
end if
end sub Funziona ;-)) sperando che sia Giusto ;-) xche io combino tanti casini che poi anche da sbagliato funziona e non si sa come mai :-))
ora volendo mettere i cinque pannelli??? tiro giu nomi a caso per un esmpio... (anche se poi possono rimanere??!!!)
dim rnd as random etc <--- questo riman invariato "unico"
dim numEstratti as list etc <--- qui ne ho aggiunto uno sotto
dim numEstratt as list etc <--- senza i finale per cambiare
dim numEstr as list etc
dim numEstra as list etc
dim numEstrat as list etc

Dim numCori As Integer = 0
Dim numCor As Integer = 0 <---- i finale
Dim numCo As Integer = 0
Dim numC As Integer = 0 <---- i finale
Dim numd As Integer = 0

if rdb2.checked = true then
le 30 textbox?? <------ oppure è meglio mettere delle checkbox per fare in modo che se le seleziono tutte e 2 faccio quella da 2 piu le 3 mancanti??
cosi scrivo meno textbox.... invece che 30 solo le restanti 18?!
Sei Stato veramente un Grande :-)) xche ho mezzo capito "" il Concetto ;-)
Grazie G R A Z I E

AntCiar Profilo | Expert

>if rdb2.checked = true then
>le 30 textbox?? <------ oppure è meglio mettere delle checkbox
>per fare in modo che se le seleziono tutte e 2 faccio quella
>da 2 piu le 3 mancanti??
>cosi scrivo meno textbox.... invece che 30 solo le restanti 18?!

Ciao Alexia.
Anche qui devi applicare il concetto di Oggetti. Invece di avere N textBox fisiche perchè non provi a creare un UserControl al cui interno ci metti 6 TextBox e gli fai un bel metodo pubblico che riceve in pasto una List di numeri e una volta ricevuta dispone i numeri nelle relative textbox. IN questo modo hai un oggetto che puoi replicare N volte senza dover "sprecare tempo e codice" per riempire le 30 textBox. Metti un domani che il tuo amico ti chiede di generare 50 combinazioni che ti metti a scrivere la "divina Commedia"?


Cristian Barca

Alexia Profilo | Newbie

Qui sono lontano dal mio sapere

in poche parole "" mettere 6 text dentro un contenitore "tipo Panel1" button1 lo tengo fuori... poi creo 30 textbox.. queste 30 text prenderanno i numeri dalle text di Pannel1.... lo si rende pubblico per poter essere visto da tutto il progetto in questione?.... gia non so cosa mettere in Public sub Panel1_Paint....
e poi sempre le 6 text deve dare imput alle 30 text e riempirle? "" tipo: text1 se text.txt allora tex2... text3 etc etc fino a concludere il ciclo?? l'evento click si mette sul Panel? cioè sulle 6 text di Pane??

AntCiar Profilo | Expert

Ciao Alexia.

Dai una occhiata al progetto che ti ho inviato. E' fatto in VS 2005 quindi penso che ti chiederà di fare la conversione una volta aperto.

Ciao
Cristian Barca

Alexia Profilo | Newbie

non ho avuto problemi d aprirlo xche ho anche il vb2005 originale... xciò no problem.....
una cosa è quella che mi ha fatto capire un mucchio di cose... cavoli io so soloa malapena a usare le form... altri elementi sono proprio eresie.. ora ne sono venuta a conoscenza del controllo utente
xò Cristian poi magari sbaglio o speri che io veda come fare.... ho notato che i numeri sono tutti uguali
devo essere io a cercare il modo di come riuscire a farle cambiare ad ognuno???
se fosse ci provero ma stai sicuro che sarà molto ardua la cosa..... almenno che non c'è la soluzione a tutto quello che hai postato....
Mille Grazie e anche per tutte le spiegazioni dentro quel lavoro.... mi hai fatto capire molto...
Mille G R A Z I E

AntCiar Profilo | Expert

Ciao Alexia.

C'è un piccolo errore concettuale. quando richiami la funzione estrai numero N volte capita che il computer esegue le N iterazioni nel giro di pochissimo tempo e quindi la somma dei secondi + millisecondi da sempre lo stesso numero e quindi anche i numeri generati sono sempre gli stessi

sostituisci tutta la funzione EstraiNumeri con quanto segue


Private seme As Integer = 1
Private Function EstraiNumeri() As Generic.List(Of Integer)
Dim res As Generic.List(Of Integer) = New Generic.List(Of Integer)()
Try
Dim rnd As Random = New Random(seme)
Dim numCor As Integer

While res.Count <= 6
numCor = rnd.Next(1, 91)
If (Not res.Contains(numCor)) Then
res.Add(numCor)
End If
seme = seme + numCor
End While
Catch ex As Exception
End Try
Return res
End Function

ciao
Cristian Barca

Alexia Profilo | Newbie

Grazie Cristia......
piu tardi ci provo :-)
e su cosa si basa a sto giro?? se non piu sul tempo!!
ai numeri usciti sullla sestina?.....
Grazie Grazie G R A Z I E
Sei Veramente Gentiissimo......

Alexia Profilo | Newbie

Cavoli..... l'ho provato......
Sei Stato Troppo Gentile......
Funziona Egreggiamente.....
ora tengo questo e poi provo ssia leggendo quello che hai scritto e sia tutta la spiegazione che Gentilmente mi hai fornito, per provare a fare poi qualcos'altro cosi ché spero di farmela rimanere in testa....
Bravissimo.. Beato Te che sai
Giuro Ti Invidio.... "in Senso Super Buono sia Chiaro"....
Grande Grande Grande......

P.S. ora varia i numeri dal Fatto che c'è Seme?? ma a cosa si riferisce questa parola??

AntCiar Profilo | Expert

Ciao Alexia.

Su questo sono un po impreparato nel senso che non so effettivamente la classe Random cosa usi per estrarre un numero quando invochi il metodo Next. Di sicuro so che quando deve essere inizializzata ha bisogno di una sorta di "valore di riferimento" da cui partire. Tempo fa feci numerose prove e notai che inizializzando la classe Random sempre con lo stesso seme veniva generata sempre la stessa sequenza di numeri. Penso che sul libro del Framework di Net siaspiegato bene il comportamento di questa classe ma ancora nonl'ho comprato.
Cristian Barca

Alexia Profilo | Newbie

GRazie Cristian Sei Stato molto Esaustivo, Intelligente, Educato e sempre preciso negli insegnamenti.....
Grazie e Bravo x Tutto......
ora cerco una info sul forum per un winsock :-) spero questo non mi / Vi Faccia dannare
A Presto....
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5