PDA

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

Geen
14-04-2004, 09:52
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...

Geen
14-04-2004, 13:34
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...

Geen
14-04-2004, 16:00
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...

Geen
15-04-2004, 11:38
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???

Geen
15-04-2004, 13:46
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

Geen
15-04-2004, 14:21
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!