Newsgroup: it.comp.lang.visual-basic
Titolo: VB2005: è possibile fare questo?

Mi serve creare in VB2005 una griglia tipo quella di un foglio elettronico, 
dove ogni cella è cliccabile. Durante l'esecuzione, nella cella selezionata 
devo inserire un'immagine diversa a seconda del valore di una certa 
variabile. Le dimensioni di questa griglia devono essere modificabili 
durante il runtime.
E' possibile farlo? 

 E' possibile farlo?
Si.
"How to: Work with Image Columns in the Windows Forms DataGridView 
Control"
http://msdn2.microsoft.com/en-us/x0tz73t0(vs.80).aspx
Ciao
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
 


Accidenti, devo proprio essere niubbo (ho ancora la forma mentis da VB6) ma 
non riesco a compilare quell'esempio. Mi dà 3 errori "Tipo MemoryStream non 
definito" alle seguenti linee:
Private blank As Bitmap = New Bitmap(New MemoryStream(blankImage))
Private x As Bitmap = New Bitmap(New MemoryStream(xImage))
Private o As Bitmap = New Bitmap(New MemoryStream(oImage))
Quello che ho fatto è creare un nuovo progetto; ho copiato e incollato tutto 
il codice nella form così creata. Che cosa non ho fatto?

 definito" alle seguenti linee:
Hai aggiunto Imports System.IO all'inizio del codice, prima della 
definizione della classe?
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 definizione della classe?
Sì, è il primo imports del codice. 

 Sě, č il primo imports del codice. 
A me funziona correttamente.
Aggiungo una classe al progetto (Ptoject > Add class...) e ci copio il 
codice. Poi metto un pulsante sul form principale, e sull'evento Click 
faccio:
Dim myTic As New TicTacToe
myTic.ShowDialog()
Tutto OK.


 Aggiungo una classe al progetto
Ecco cosa non avevo fatto. :-P
Avevo messo il codice direttamente nella form. 

 Avevo messo il codice direttamente nella form. 
La classe ha già una sua form, infatti eredita da 
System.Windows.Forms.Form con l'istruzione Inherits.


Okay, ho cercato di adattare l'esempio al mio caso, ma c'è qualcosa che mi 
sfugge. Ordunque:
1) la mia form principale (frmMain) ha un pulsante che attiva la 
visualizzazione della form contenente il datagrid (frmSymbols). Per farlo 
uso semplicemente l'istruzione frmSymbols.Show
2) all'inizio della form frmSymbols (prima della dichiarazione della sua 
classe) ho fatto l'imports di System.IO. Poi (nella dichiarazione delle 
variabili di quella form) ho creato una bitmap facendo:
Private bmpProva As Bitmap = New Bitmap("c:\prova.bmp")
E poi ho creato la funzione eseguita quando la form viene caricata, cioè:
Private Sub frmSymbols_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        Dim imageColumn As DataGridViewImageColumn
        Dim columnCount As Integer = 0
        Do
            imageColumn = New DataGridViewImageColumn()
            imageColumn.Image = bmpempty
            imageColumn.ImageLayout = DataGridViewImageCellLayout.NotSet
            imageColumn.Description = "default image layout"
            DataGridView1.Columns.Add(imageColumn)
            columnCount = columnCount + 1
        Loop While columnCount < 20
    End Sub
Però, quando eseguo il programma e premo il pulsante che dovrebbe aprire 
frmSysmbols, il programma si interrompe con un errore al momento di eseguire 
frmSymbols.Show. L'errore è il seguente: "Errore durante la creazione del 
form. Per informazioni dettagliate vedere Exception.InnerException. Errore: 
Parametro non valido."
Cos'ho sbagliato? 

P.S.
Mi sono dimenticato di dire che l'errore non si verifica piů se commento le 
linee:
Private bmpProva As Bitmap = New Bitmap("c:\prova.bmp")
e
imageColumn.Image = bmpempty
anche se ovviamente, cosě facendo, al posto delle immagini vengono solo 
visualizzate delle X rosse in riquadri bianchi.