View Full Version : [VB.NET]Aiuto com mio programmino.....
DjDiabolik
25-09-2009, 14:05
Come detto nell'altro thread.... ricomincio a fare la Gui del mio programmino.
Per non ripetere lo stesso errore appunto ho deciso di prima completare tutta la GUI... e poi cominciare ad editare il codice :)
Siccome ho intenzione di fare l'interfaccia utente...... vorrei sapere come (per ora) :
- E' possibile attivare o meno la grafica di un form.vb magari con una pressione di un tasto.
In pratica io ho una prima pagina... e un tasto tipo Avanti deve aprire un'altro form per l'inserimento di alcuni dati.... subito dopo con la pressione di un'altro tasto (Tipo Next) chiudere lo stesso form (ma mantenere ovviamente i dati inseriti) e visualizzarne un'altro per poter inserire altri dati e in questo nuovo Form magari con un tasto Indietro ritornare ai dati reinseriti in precedenza.....
RaouL_BennetH
25-09-2009, 14:45
Come detto nell'altro thread.... ricomincio a fare la Gui del mio programmino.
Per non ripetere lo stesso errore appunto ho deciso di prima completare tutta la GUI... e poi cominciare ad editare il codice :)
Siccome ho intenzione di fare l'interfaccia utente...... vorrei sapere come (per ora) :
- E' possibile attivare o meno la grafica di un form.vb magari con una pressione di un tasto.
In pratica io ho una prima pagina... e un tasto tipo Avanti deve aprire un'altro form per l'inserimento di alcuni dati.... subito dopo con la pressione di un'altro tasto (Tipo Next) chiudere lo stesso form (ma mantenere ovviamente i dati inseriti) e visualizzarne un'altro per poter inserire altri dati e in questo nuovo Form magari con un tasto Indietro ritornare ai dati reinseriti in precedenza.....
Ciao :)
Se posso permettermi di darti un consiglio, la GUI dovrebbe essere l'ultima cosa da progettare.
Fossi in te, creerei due progetti all'interno della stessa soluzione:
Uno di tipo class library dove avere tutto ciò che riguarda i dati e la loro manipolazione
L'altro, appunto la UI, che si limiterà quindi ad essere un semplice contenitore per la visualizzazione dei dati.
DjDiabolik
25-09-2009, 15:58
Ok.. questa soluzione potrebbe andare però mi sembra per un livello avanzato di conoscenza del VB.Net.
Per ora per ottenere quello che ho spiegato sopra me la sono cavata giocando molto sui FormX.Visible = True o False dove appunto X sta per il Form e con i vari pulsanti disabilito o riabilito le varie opzioni.
Cosi facendo praticamente ho anche appurato che se per esempio io setto dei valori nei TextBox in un form particolare al momento di tornare in quel box il testo non scompare e questo è molto importante visto che poi alla fine devo appunto utilizzare i valori delle TextBox per tirare fuori un valore finale!!
Per farti capire un pò quello che alla fine devo fare:
Form1.TextBox1.Value = "Tizio"
Form1.TextBox2.Value = "Caio"
Da un form diverso poi richiamo i due Value e con un bottono devo tirare fuori semplicemente una cosa del genere su un'ulteriori textbox quindi:
Form2.TextBox1.Value = Form1.TextBox1.Value + " " + Form1.TextBox2.Value
e quindi ottenere l'output a schermo.............. anzi... queste variabili TextBox siccome che devono essere strighe.... dov'è che posso dichiararle ??
Posso dichiarare per esempio tutte le variabili come stringe al momento di caricare il programma stesso quindi il Form1.vb ??
Se è un semplice "trenino di Form" non sprecherei proprio una Soluzione multi-progetto. La cosa più semplice è avere una serie di variabili Public in un modulo che tengono memoria dei dati inseriti o modificati di volta in volta, nonostante il passaggio tra una Form e l'altra... ;)
DjDiabolik
25-09-2009, 18:58
Se è un semplice "trenino di Form" non sprecherei proprio una Soluzione multi-progetto. La cosa più semplice è avere una serie di variabili Public in un modulo che tengono memoria dei dati inseriti o modificati di volta in volta, nonostante il passaggio tra una Form e l'altra... ;)
Si va bè.. io non ho toccato niente e cambiando da form a form i vari TextBox rimangono impressi e non si resettano... e meglio cosi :)
Allora ora altre 2 battaglie da fare:
Praticamente ho un form che contiene una TextBox in ReadOnly che la uso come una sorta di Log.
Io vorrei fare in modo appunto che ogni volta che vado a modificare questo log il contenuto dello stesso non venga cancellato ma bensi aggiunto in sotto forma di elenco puntato.. dovrebbe uscire una cosa tipo:
- Nota 1
- Nota 2
- Note 3
ecc. ecc.
E possibilmente che il log sia poi scorribile con le banda laterale..... è possibile ?
*EDIT*
Allora.. invece del TextBox ho messo il RichTextBox per la finestra di log.... ed ogni volta che devo scrivere qualcosa in pratica gli faccio sommare la vecchia stringa a quella nuova con qualcosa del genere:
Richtextbox.Value = Richtextbox.value + "nuova parola"
Funziona alla grande.... ora pero dovrei trovare un carattere... che ne so come si chiama.. o cmq un sistema per far andare a capo al momento di inserire la nuova stringa.
Esiste un carattere jolly ?? Qualcosa che simuli la pressine del tasto invio ??
Certo, il metodo più immediato è il carattere dato dalla costante Microsoft.VisualBasic.vbCrLf, per gli amici vbCrLf :
MsgBox("- A" & vbCrLf & "- B")
Solo, non sarebbe meglio una ListBox ? La sua struttura a blocchi separati inoltre ti permette di leggerne il contenuto una riga alla volta... ;)
DjDiabolik
25-09-2009, 21:24
Certo, il metodo più immediato è il carattere dato dalla costante Microsoft.VisualBasic.vbCrLf, per gli amici vbCrLf :
MsgBox("- A" & vbCrLf & "- B")
Solo, non sarebbe meglio una ListBox ? La sua struttura a blocchi separati inoltre ti permette di leggerne il contenuto una riga alla volta... ;)
Allora.... allora... per questo semplice log ho usato benissimo il comando:
RichTextBox.AppendText... e alla fine per farlo andare al prossimo append ho messo un Environment.Newline.
Per ora può andare anche cosi.
Ma Lol.. ogni volta che ho qualcosa per trozzi e bocconi e magari anche nel modo meno congeniale becco una soluzione......
Stavolta però mi sa che quello che mi hai suggerito tu può tornarmi utile..... perchè ora dovrei creare un form.
Da questo form alla fine devono uscire diverse stringhe e ognuna di essa deve essere una variabile.
In pratica io ho 3 TextBox con 3 valori da inserire....... alla fine del tutto devo avere un pulsante che mi conbina queste 3 textbox in un'unica stringa ottenendo una cosa del genere:
TextBox1:TextBox2:TextBox3 (in pratica la stringa finale deve solo aggiungere i ":" tra le 3 strighe.
La difficolta è che di queste 3 stringhe devo avere la possibilità di di crearne diverse con lo stesso form....... diciamo che dopo aver creato una o due stringa con un'ulteriore pulsante devo salvare tutto queste stringhe in un'unica stringa ed ottenere qualcosa del tipo:
xx:yy:zz xx(2):yy(2):zz(2) ecc. ecc.
E' chiaro un pò ?? Quello che dovrei fare ?
La difficolta è che di queste 3 stringhe devo avere la possibilità di di crearne diverse con lo stesso form....... diciamo che dopo aver creato una o due stringa con un'ulteriore pulsante devo salvare tutto queste stringhe in un'unica stringa ed ottenere qualcosa del tipo:
xx:yy:zz xx(2):yy(2):zz(2) ecc. ecc.
E' chiaro un pò ?? Quello che dovrei fare ?
Mica tanto. :D
A dire il vero non ci ho capito una mazza... :D
Le textbox sono 3, vuoi concatenare il testo interponendo ":" e mettere la stringa risultante in una variabile. Facile.
Oppure le textbox sono un multiplo di 3 e questa cosa la devi fare a 3 a 3...
Se è così fai un array di stringhe. Alla fine scorri l'array e concateni tutto in un'unica stringa... :stordita:
DjDiabolik
25-09-2009, 22:25
http://img27.imageshack.us/img27/7863/appunti02u.jpg
Allora facciamo cosi... stavolta ti posto la form che ho creato io:
- Manca però la finestra di Log sotto perchè appunto non so cosa usare.
- E mancano le label dei pulsanti......... che ho tolto....... cmq ora ti spiego.
In pratica.... quello da fare qua è riempire il primo TextBox e il Secondo.
Il Checkbox che vedi sotto praticamente disattiva il panel del NumericUpDown inoltre attiva una variabile a valore 1 se è attivo o 0 se è disattivo.
A questo punto sarebbe da premere il Tasto Aggiungi......... e dovrei ottenere questo nei diversi casi ma cmq verifico prima il valore della variabile settata dalla checkbox:
- Se la Variabile vale 1 io devo ottenere una variabile che combina le 2 TextBox e il NumericUpDown ottenendo appunto la stringa xx:yy:zz
- Se invece la variabile vale 0 devo prendere solamente i valori delle textbox ed escludere il valore della NumericUpDown quindi ottenere solo xx:yy
quindi una volta fatto questo ognuna di queste stringhe deve essere una variabile questo perchè devo far unire queste stringhe ad altre stringhe che ho creato nel resto del programma........
Beh, è semplicissimo, basta che in un modulo crei 3 variabili, nominate opportunamente ( sul tipo : frm1Txt1, frm1Txt2, frm1Num ) più una, che contiene i valori concatenati. Le variabili Public in un modulo vengono viste da ogni punto del programma e anche se chiudi la Form trattengono l'ultimo valore settato per tutta la durata del runtime... Dov'è il difficile ? :D
DjDiabolik
26-09-2009, 00:00
Lol... non è cosi semplice come vedi... allora guarda io l'ho risolta cosi ed ho tirato fuori questo:
http://img188.imageshack.us/img188/2886/appunti02.jpg
Ti lascio anche le Label dei pulsanti..........tanto... che gli fa ?? :)
Allora vediamo...... io ho compilato tutto i campi...ora vediamo... io compilo il primo e il secondo textbox e spunto o no la il checkbox sotto:
A questo punto ottengo un messaggio nella richtextbox a destra che ho configurato tutto e mi da i vari campi inseriti sopra ... e nella finestra a sinistra faccio stampare la stringa completa dei due punti.
Questo in entrambi i casi.. ovviamente se la checkbox è spuntata la stringa avra 3 valori sempre divisi dai due punti.. mentre se la checkbox non è spuntata io ho quella stringa di 2 valori.
Ha questo punto ho pensato... come faccio io se magari faccio un'inserimento errato ??
Le mie poche conoscenze mi ha portato a settare quel richbox.textbox a destra in non ReadOnly.... in modo che se io faccio un'inserimento sbagliato seleziono il testo e lo cancello via tastiera.
So che come soluzione è un pò alla vamos e fa anche schifo a dire la verita... ma non so alternative... la figata sarebbe quella di fare una lista di queste stringhe e poterne selezionare una e cancellarla direttamente......
A questo punto il pulsante aggiungi tutto, in pratica sto pulsante non dovrebbe "far altro" che prendere quindi queste stringe intere in quel richtexbox di destra e fare tutte variabili per poterle utilizzare in seguito.
Come faccio ??
Calcola che ora io per poter aggiungere le stringhe in quel richtextbox ho ancora utilizzato il Richtextbox.textappend unito al Environment.Newline alla fine per far andare a capo tutto....
Ha questo punto ho pensato... come faccio io se magari faccio un'inserimento errato ??
Le mie poche conoscenze mi ha portato a settare quel richbox.textbox a destra in non ReadOnly.... in modo che se io faccio un'inserimento sbagliato seleziono il testo e lo cancello via tastiera.
So che come soluzione è un pò alla vamos e fa anche schifo a dire la verita... ma non so alternative... la figata sarebbe quella di fare una lista di queste stringhe e poterne selezionare una e cancellarla direttamente......
Sì, decisamente fa schifo come soluzione. :p
Allora, dato che sei un po' in "start-up" accetta qualche consiglio, o almeno prova, poi decidi :
1. Gli inserimenti utente, di qualsiasi genere siano, si controllano a monte, mai a valle ! Ossia, fai in modo di controllare PRIMA, evitando di gestire l'errore POI.
2. L'idea della RichTextBox in questo caso non sta in piedi. La lista delle stringhe ce l'hai ad un palmo dal naso : butta la textbox e usa una ListBox !
A questo punto il pulsante aggiungi tutto, in pratica sto pulsante non dovrebbe "far altro" che prendere quindi queste stringe intere in quel richtexbox di destra e fare tutte variabili per poterle utilizzare in seguito.
Come faccio ??
Calcola che ora io per poter aggiungere le stringhe in quel richtextbox ho ancora utilizzato il Richtextbox.textappend unito al Environment.Newline alla fine per far andare a capo tutto....
Semplice. Poniamo che tu al punto precedente abbia scelto di adottare il mio consiglio. A questo punto hai una ListBox in cui ogni Item è una stringa.
In un modulo definisci una List di stringhe specifica per questa Form, esempio :
Public stringheForm1 As New List(Of String)
Quando dai "Aggiungi Tutto" :
stringheForm1.Clear()
For i As Integer = 0 To ListBox1.Items.Count - 1
stringheForm1.Add(ListBox1.Items(i))
Next
e hai finito. ;)
DjDiabolik
26-09-2009, 12:01
Sì, decisamente fa schifo come soluzione. :p
Allora, dato che sei un po' in "start-up" accetta qualche consiglio, o almeno prova, poi decidi :
1. Gli inserimenti utente, di qualsiasi genere siano, si controllano a monte, mai a valle ! Ossia, fai in modo di controllare PRIMA, evitando di gestire l'errore POI.
2. L'idea della RichTextBox in questo caso non sta in piedi. La lista delle stringhe ce l'hai ad un palmo dal naso : butta la textbox e usa una ListBox !
Semplice. Poniamo che tu al punto precedente abbia scelto di adottare il mio consiglio. A questo punto hai una ListBox in cui ogni Item è una stringa.
In un modulo definisci una List di stringhe specifica per questa Form, esempio :
Public stringheForm1 As New List(Of String)
Quando dai "Aggiungi Tutto" :
stringheForm1.Clear()
For i As Integer = 0 To ListBox1.Items.Count - 1
stringheForm1.Add(ListBox1.Items(i))
Next
e hai finito. ;)
Allora andiamo per passo.... io elimino la RTB.... e inserisco la ListBox ok ?
A questo punto posso lasciare tutto il testo per darmi il Log nella RTB a sinistra... però poi devo cambiare il tutto e far uscire l'output non sull'RTB
ma nella ListBox.... e come si fa ? :)
Perchè l'hai capito ora che ero "Start-Up" ??
però poi devo cambiare il tutto e far uscire l'output non sull'RTB
ma nella ListBox.... e come si fa ? :)
Beh, dai, è elementare. Quando hai una nuova stringa da inserire basta che fai :
ListBox1.Items.Add(nuovaStringa)
Tra l'altro questo ti evita anche di andare a capo ad ogni stringa inserita.
DjDiabolik
26-09-2009, 15:57
Beh, dai, è elementare. Quando hai una nuova stringa da inserire basta che fai :
ListBox1.Items.Add(nuovaStringa)
Tra l'altro questo ti evita anche di andare a capo ad ogni stringa inserita.
Questo pomeriggio sono impegnato su altra roba...... domani lavoro quindi se ne riparla lunedi o al massimo domani sera dopo il Milan :)
Cmq sia questa listbox mi permette anche di modificare eventuali inserimenti errati ?
DjDiabolik
26-09-2009, 19:46
http://img198.imageshack.us/img198/3519/appunti01n.jpg
Ma Guardalo!! Guardalo quant'è carino ora!! :) :)
Dim Stringa As String
Stringa = TextBox2.Text + ":" + TextBox2.Text
ListBox1.Items.Add(Stringa)
Per far aggiungere un valore :)
e:
If ListBox1.SelectedIndex >= 0 Then
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
End If
Nel caso sia selezionata una riga.. il tasto rimuovi la cancella!!!
Ora non resta che trovare come riunire le varie stringhe su + variabili.........
Ah.. sai per caso come far andare l'autofocus nella ListBox ??
Io ho messo ListBox1.Autofocus() ma non sembra andare.....
*EDIT*
Inoltre... mica ho capito ora cosa mettere per far leggere i vari inserimenti ?
Immagina che io alla fine vorrei ottenere le varie stringhe come Card1... Card2.. Card3 a seconda di quandi inserimenti fatti...
*EDIT 2*
Allora... ti vengo incontro... nel codice dello stesso form... in alto ho messo quel public.
Nel codice della pressione del tasto "Aggiungi tutto" poi ho copiato il codice postato da te.....
Fin qui ci siamo... ok ma poi che varibili mi ritrovo alla fine ?? Quali sono le variabili ??
Vediamo se ci azzecco.... le variabili si chiameranno StringheForm1(1), (2), (3) e via dicendo ?
*EDIT 2*
Allora... ti vengo incontro... nel codice dello stesso form... in alto ho messo quel public.
Nel codice della pressione del tasto "Aggiungi tutto" poi ho copiato il codice postato da te.....
Fin qui ci siamo... ok ma poi che varibili mi ritrovo alla fine ?? Quali sono le variabili ??
Vediamo se ci azzecco.... le variabili si chiameranno StringheForm1(1), (2), (3) e via dicendo ?
No, Public stringheForm1 As New List(Of String) va messo in un modulo, NON a livello di Form.
Sì, esatto, basterà ciclare la List() stringheForm1 e avrai tutte le stringhe raccolte in quella Form, nello stesso ordine in cui compaiono nella ListBox, ma solo se avrai prima popolato stringheForm1 correttamente, ossia, come già scritto :
stringheForm1.Clear()
For i As Integer = 0 To ListBox1.Items.Count - 1
stringheForm1.Add(ListBox1.Items(i))
Next
DjDiabolik
28-09-2009, 22:19
No, Public stringheForm1 As New List(Of String) va messo in un modulo, NON a livello di Form.
Sì, esatto, basterà ciclare la List() stringheForm1 e avrai tutte le stringhe raccolte in quella Form, nello stesso ordine in cui compaiono nella ListBox, ma solo se avrai prima popolato stringheForm1 correttamente, ossia, come già scritto :
stringheForm1.Clear()
For i As Integer = 0 To ListBox1.Items.Count - 1
stringheForm1.Add(ListBox1.Items(i))
Next
In altri forum mi hanno già sparato a morte..... premetto che io non voglio diventare un programmatore ma a sto punto se mi è possibile vorrei solo finire sto programmino.
In un'altro forum ho detto che avevo usato google per trovare alcune informazioni e funzioni e mi hanno trucidato.
Premesso che devo vedere qual'è la differenza tra la form e un modulo... nel frattempo avevo fatto un pò di casini.. devo ripristinare il programma e far si... poi vediamo che riesco a trovare.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.