View Full Version : Tool Bar vb.net
mangzeus
14-04-2004, 08:06
Come faccio ad inserire un immagine o un icona sui pulsanti di una tool bar??nelle proprietà ho guardato ma c'è solo imageindex ma è posizionato sul colore di default e non mi lascia cambiare colore o immagine....grazie
Porta dentro un imagelist nella tua form,riempila con le immagini che vuoi,setta la proprietà imagelist della toolbar con l'imagelist che hai appena creato e ora,in imageindex,puoi scegliere le icone che vuoi.
mangzeus
14-04-2004, 10:34
e l'image list come faccio a portarmela dentro...dove devo andare...??
ah ne approfitto per chiederti due cose...io volevo creare un costruttore...come sapevo io bastava fare una sub in qualsiasi parte della classe e metterci dentro quello che voglio...
il libro quì mi dice di fare così..
public sub new()
'Quì metto il codice che voglio
end sub
poi mi dice il libro che Sub New sarà sempre eseguito prima di ogni altra istruzione o codice all'interno del progetto...
io l'ho fatto solo che mi da un errore perchè c'è già una sub new nel codice nascosto...questa
Public Sub New()
MyBase.New()
'Chiamata richiesta da Progettazione Windows Form.
InitializeComponent()
'Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent()
End Sub
io allora volevo chiederti come dovevo fare ad usare questo costruttore...o come costruire una sub e fare partire il progetto con quella determinata sub...
mangzeus
14-04-2004, 10:44
per l'image list ci sono riuscito se mi puoi spiegare quello che ti ho postato mi faresti un favore...
In effetti e' giusto che ti segnali cosi,nella creazione della form viene già generato il costruttore per la classe form,quindi eventuali porzioni di codice che vuoi far eseguire devono essere inserite li(anche se deve essere fatto con cautela perche',trovandosi nel costruttore,non e' detto che qualsiasi oggetto sia già istanziato).
E' cmq possibile implementare più costruttori che devono differire però nel tipo o nel numero di parametri(overloading di funzione).Esempio generale:
Public class MyClass
sub New()
msgbox ("Costruttore 1")
end sub
sub New(MioMsg as string)
msgbox (MioMsg)
end sub
End Class
Dichiarando due oggetti di tipo MyClass
Public Class1 as new MyClass()
Public Class2 as new MyClass("Costruttore2")
ottengo lo stesso oggetto istanziato però tramite costruttori differenti.
La tua ultima domanda sembrerebbe slegata però da tutto questo discorso perche' se vuoi far partire un progetto da una funzione devi crearti un modulo,e scrivere
Public Sub Main()
'aggiungi qui tutto il codice che devi implementare
'e con l'istruzione sotto mostri la tua form principale/prima form
'che vuoi far vedere
System.Windows.Forms.Application.Run(New fPrincipale)
End sub
Fatto questo,sul tuo progetto,fai pulsante destro,proprietà e ti comparirà una finestra.Alla voce Common Properties->General vedrai che c'e' una combo Startup Object dove potrai scegliere al posto di una form la sub main che abbiamo implementato sopra.
mangzeus
14-04-2004, 14:44
l'overloading praticamente differisce dalle due sub perchè su una gli vengono passati degli argomenti e invece allaltra no...
per quanto riguarda il fatto di far partire un form o un altro all'inizio lo sapevo la mia domanda era sulla sub new...se io voglio ad esempio partire con il mio programma con del codice che mi prepara la mia apllicazione faccio come mi hai detto tu...mi creo una sub new dove dentro posso ad esempio impostare la data e l'ora del sistema di una status bar o dell'altro codice e dopo con la tua ultima istruzione dirgli con che form partire...grazie cmq
volevo chiederti un'altra cosa...ti ricordi che avevo problemi con la select perchè era un array a più dimensioni e se all'interno del mio database esisteva più di un "impiegato" uguale non riuscivo a visualizzarlo...subito come mi hai detto tu lo visualizzavo così:
ResultRow = dt.Select("Impiegato='" & txtImpiegato.Text & "'")
txtPrestito.Text = ResultRow(0)Item("Prestito")
io sono riuscito a farmelo visualizzare se è più di uno in questo modo...sono stato bravo???
dt = ds.Tables("ArcImpiegati")
ResultRow = dt.Select("Impiegato='" & txtImpiegato.Text & "'")
i = ResultRow.Length()
For i = 0 To i - 1
txtPrestito.Text = ResultRow(i).Item("Prestito")
Next
ecco...volevo chiederti se non c'era un modo come in vb6 dove potevi scorrere il db,in questo caso il datatable fino alla fine dei record o fino all'inizio...BOF EOF erano le 2 proprietà...io prima di applicare questo piccolo ciclo volevo scorrere i record dell'array che mi aveva restituito la select, quindi l'array Resultrow...spero di essermi spiegato...
Originariamente inviato da mangzeus
...ti ricordi che avevo problemi con la select perchè era un array a più dimensioni e se all'interno del mio database esisteva più di un "impiegato" uguale non riuscivo a visualizzarlo...subito come mi hai detto tu lo visualizzavo così:
ResultRow = dt.Select("Impiegato='" & txtImpiegato.Text & "'")
txtPrestito.Text = ResultRow(0)Item("Prestito")
io sono riuscito a farmelo visualizzare se è più di uno in questo modo...sono stato bravo???
dt = ds.Tables("ArcImpiegati")
ResultRow = dt.Select("Impiegato='" & txtImpiegato.Text & "'")
i = ResultRow.Length()
For i = 0 To i - 1
txtPrestito.Text = ResultRow(i).Item("Prestito")
Next
Ma la riga corrente non la prendi al cambio dell'item sulla listbox?
Se la prendi da li ottieni,anche a parità di nome,una e una sola riga.
In teoria,da quello che immaginavo,hai la lista degli impiegati sulla listbox e man mano che scorri gli elementi ti mostra,uno alla volta,i dati estesi per ciascun impiegato.E'cosi?Perche' se si questo
For i = 0 To i - 1
txtPrestito.Text = ResultRow(i).Item("Prestito")
Next
ha poco senso..significa assegnare alla textbox tutti i valori della colonan prestito(sovrascrivendo man mano) delle righe che hanno più occorrenze per singolo nome!
Originariamente inviato da mangzeus
ecco...volevo chiederti se non c'era un modo come in vb6 dove potevi scorrere il db,in questo caso il datatable fino alla fine dei record o fino all'inizio...BOF EOF erano le 2 proprietà...io prima di applicare questo piccolo ciclo volevo scorrere i record dell'array che mi aveva restituito la select, quindi l'array Resultrow...spero di essermi spiegato...
Cerrrto che c'è
Dim Row As DataRow
ResultRows = ds.Tables("ArcImpiegati").Select(<criterio>)
For Each Row In ResultRows
msgbox Row.Item("Prestito")
Next
oppure,come hai fatto tu,via indice(preferisco la soluz. sopra)
For i as integer= 0 To ResultRow.Length()- 1
txtPrestito.Text = ResultRow(i).Item("Prestito")
Next
idem se applicato a tutta la datatable
For Each Row In ds.Tables("ArcImpiegati").Rows
msgbox Row.Item("Prestito")
Next
mangzeus
15-04-2004, 08:16
Originariamente inviato da Geen
Ma la riga corrente non la prendi al cambio dell'item sulla listbox?
Se la prendi da li ottieni,anche a parità di nome,una e una sola riga.
In teoria,da quello che immaginavo,hai la lista degli impiegati sulla listbox e man mano che scorri gli elementi ti mostra,uno alla volta,i dati estesi per ciascun impiegato.E'cosi?Perche' se si questo
For i = 0 To i - 1
txtPrestito.Text = ResultRow(i).Item("Prestito")
Next
ha poco senso..significa assegnare alla textbox tutti i valori della colonan prestito(sovrascrivendo man mano) delle righe che hanno più occorrenze per singolo nome!
Si era così ma io intendevo che voglio visualizzare, magari con un tasto "sucessivo i vari record dell'array che mi ritorna....quindi una volta che faccio click mi ritorno l'item(0) un'altra volta che faccio click mi ritorna l'indice (1) e così via fino alla fine dei record che ci sono in ResultRow...con la list al cambio della selezione mi doveva immediatamente portare sulla riga corrente di quel dato impiegato ma mi dava un errore...cmq io intendevo quello che ti ho scritto sopra...
Cerrrto che c'è
Dim Row As DataRow
ResultRows = ds.Tables("ArcImpiegati").Select(<criterio>)
For Each Row In ResultRows
msgbox Row.Item("Prestito")
Next
oppure,come hai fatto tu,via indice(preferisco la soluz. sopra)
For i as integer= 0 To ResultRow.Length()- 1
txtPrestito.Text = ResultRow(i).Item("Prestito")
Next
idem se applicato a tutta la datatable
For Each Row In ds.Tables("ArcImpiegati").Rows
msgbox Row.Item("Prestito")
Next
per quanto riguarda questo mi sembra di capire che non esiste una proprietà che mi porti all'ultimo o al primo record di un datarow con quello che mi hai scritto tu mi scorro tutto il datarow fino alla fine e per ogni riga mi scrive in una msgbx il contenuto di quel specifico campo...io volevo associarlo ad un altro controllo della form per visualizzare ogni record dell'array...e poi mi serviva sapere la fine e l'inizio per posizionarmi sul primo e sull'ultimo record del datarow....
ah un'altra cosa che non centra niente...volevo sapere come faccio ad importare i controlli di un form all'interno di un modulo...un giorno c'ero riuscito ma non mi ricordo più...perchè se non dichiari niente non ti vede nessun controllo...mentre in vb6 te li vede subito...
mangzeus
15-04-2004, 08:50
Cerrrto che c'è
Dim Row As DataRow
ResultRows = ds.Tables("ArcImpiegati").Select(<criterio>)
For Each Row In ResultRows
msgbox Row.Item("Prestito")
Next
idem se applicato a tutta la datatable
For Each Row In ds.Tables("ArcImpiegati").Rows
msgbox Row.Item("Prestito")
Next [/QUOTE]
mi da un errore...dice che row non è un menbro dell'array
mangzeus
15-04-2004, 09:12
mi da un errore...dice che row non è un menbro dell'array [/QUOTE]
funziona sbagliavo io....se mi puoi risp a quello che ti ho scritto sopra mi fai un enorme piacere...
Originariamente inviato da mangzeus
per quanto riguarda questo mi sembra di capire che non esiste una proprietà che mi porti all'ultimo o al primo record di un datarow con quello che mi hai scritto tu mi scorro tutto il datarow fino alla fine e per ogni riga mi scrive in una msgbx il contenuto di quel specifico campo...io volevo associarlo ad un altro controllo della form per visualizzare ogni record dell'array...e poi mi serviva sapere la fine e l'inizio per posizionarmi sul primo e sull'ultimo record del datarow....
Non esiste un metodo diretto per avere la prima e l'ultima riga ma c'e' un sistema altrettanto comodo:
Dim FirsRow,LastRow As DataRow
FirstRow = ds.Tables("ArcImpiegati").Rows(0)
LastRow=ds.Tables("ArcImpiegati").Rows(ds.Tables("ArcImpiegati").Rows.Count-1)
Originariamente inviato da mangzeus
ah un'altra cosa che non centra niente...volevo sapere come faccio ad importare i controlli di un form all'interno di un modulo...
Non riesco a capire la domanda!
mangzeus
15-04-2004, 13:30
Originariamente inviato da Geen
Non esiste un metodo diretto per avere la prima e l'ultima riga ma c'e' un sistema altrettanto comodo:
Dim FirsRow,LastRow As DataRow
FirstRow = ds.Tables("ArcImpiegati").Rows(0)
LastRow=ds.Tables("ArcImpiegati").Rows(ds.Tables("ArcImpiegati").Rows.Count-1)
Non riesco a capire la domanda!
infatti è quello che volevo fare io...pensavo esistesse una proprietà specifica cmq grazie...
Intendo quando in un modulo devi richiamare il controllo di un form...io ho aggiunto un modulo nel mio progetto dove intendo mettere tutte le funzioni e le sub, come il "popola tabella" volevo sapere come posso rendere visibili i controlli del form all'interno del modulo...se io all'interno del modulo scrivo txtImpiegato.text non me lo riconosce come controllo del mio form...devo dichiarare qualcosa all'inizio???
L'ambito predefinito di visibilità del controllo e' solo la form quindi ,logicamente,non puoi accedere al controllo direttamente.
La soluzione più semplice(e applicabile nella maggior parte dei casi) e' passare alla funzione il controllo stesso.
Altrimenti bisogna ricavarsi la form interessata,fare una verifica su che form e' e,infine,ciclare nella controlcollections della form.
Ho affrontato lo stesso "problema" e ti consiglio il primo metodo,non grava granchè sulle prestazioni ed e' molto semplice
mangzeus
15-04-2004, 13:54
In pratica lo devo passare come argomento...passo come argomento il form...ma mi ricordo che avevo scoperto un metodo...ma poi perchè hanno fatto una boiata simile??era così comodo avere i controlli anche sui moduli, anche se davanti dovevi mettere il nome del form...
sei un guru...vedo che rispondi a mille discussioni...sei diventato il mio idolo...ho chiamato un mio programma di prova "geen"
grazie come sempre
Non e' una boiata,prima la form e tutti i suoi controlli erano bel che istanziati da subito permettendoti quindi di avere la visibilità diretta.Ora,con il passaggio a un ambiente completamente object oriented,anche le form sono classi e istanziate solo a runtime..per questo sei obbligato a passare i controlli come argomenti della funzione.E' un piccolo svantaggio..ma con il passaggio a un ambiente O.O. ne abbiamo guadagnato millemila volte di più!
Cmq non passerei la form intera,per questione di comodità di lavoro e per rendere quanto più generico il codice.Quindi in un ipotetica funzione PopolaTabella,passerei solo la grid e restituirei magari un bool o il numero di righe caricate
Public function PopolaTabella(Grid as <TipoTabella>,DataTable)as boolean
end function
Ps: Ti ringrazio del guru,anche se un pelo esagerato..magari esserlo!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.