Newsgroup: it.comp.lang.visual-basic
Titolo: [.Net] TypeOf e tipi derivati

Ciao a tutti,
ho problema: dato la classe CLASSE_A e la classe CLASSE_B derivata da
CLASSE_A se ho la variabile b di tipo CLASSE_B un controllo del tipo
If TypeOf b Is CLASSE_B non mi funzione perche' TypeOf mi ritorna la base
class CLASSE_A.
Come faccio a verificare che b e' di tipo CLASSE_B ?
Ciao
Stefano "HappyMan" (Lake Maggiore - Italy)
-- 
The Personal Framework for Object Oriented Windows Development (Win32)
http://www.sgr.info
Email happyman69 (at) 
despammed.com

Ciao
MSDN consiglia l'uso combinato con TypeName:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcn7/html/vbcondiscoveringclassobjectbelongsto.asp
Ciao!

 Come faccio a verificare che b e' di tipo CLASSE_B ?
Se non ricordo male basta usare l'IS
If MyObject IS GetType(BaseClass) Then
Ciao

 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcn7/html/vbcondiscoveringclassobjectbelongsto.asp
[ErPotenza]
Ho verificato: TypeName(b) restituisce la stringa "CLASSE_A", equivalente a
quanto ritornato da TypeOf sotto forma di oggetto :-(
[Zanna]
GetType(b) mi ritorna le info legate a CLASSE_A :-((


quanto ritornato da TypeOf sotto forma di oggetto :-(
Test ...
-----------------------------------------------------------------------
Option Strict On
Imports Microsoft.VisualBasic
Class A
	'
End Class
Class B : Inherits A
	'
End Class
Public Class Test
	Public Shared Sub Main()
		Dim a As New A()
		Dim b As New B()
 
		System.Console.WriteLine(TypeOf a Is A)
		System.Console.WriteLine(TypeOf b Is A)
 
		System.Console.WriteLine(TypeName(b))
	End Sub
End Class
-----------------------------------------------------------------------
True
True
B
O fai qualcosa che non faccio io?
Ciao!

In data Tue, 06 Apr 2004 15:17:30 GMT, ErPotenza ha scritto:
[cut]
Orpo, a occhio sembrerebbe di no :-)
Sto litigando con i DataGridTextBoxColumn, che eredito per creare tipi per
ospitare ComboBox e NumberBox (un mio oggetto a sua volta ereditato da
TextBox) partendo da un oggetto DataGridTextBoxColumnEx che mi gestisce i
colori per righe e colonne:
Public Class DataGridTextBoxColumnEx
   Inherits DataGridTextBoxColumn
...
End Class
Public Class DataGridNumberBoxColumn
   Inherits DataGridTextBoxColumnEx
...
End Class
Li do in pasto ad un DataGridTableStyle ts da cui in seguito li recupero
cosi':
Dim c as Object
c=ts.GridColumnStyles(i)
dove il c dovrebbe essere una delle n colonne aggiunte.
Il problema l'ho nel controllo seguente
If TypeOf c Is DataGridNumberBoxColumn Then ...
che non scatta mai in quanto per ogni colonna recuperata il tipo e' sempre
DataGridTextBoxColumnEx
In ogni caso per ora ho risolto con una collection separata (purtroppo non
ho troppo tempo per esperimenti), poi vedro' una soluzione piu' elegante.
Ciao


TextBox) 
[cut]
Il test diventa qualcosa di simile a questo:
--------------------------------------------------------------------------
Option Strict On
Imports Microsoft.VisualBasic
Imports System
Imports System.ComponentModel
Imports System.Console
Imports System.Data
Imports System.Drawing
Imports System.Windows
Imports System.Windows.Forms
Class DataGridTextBoxColumnEx
    Inherits DataGridTextBoxColumn
'
End Class
Class DataGridNumberBoxColumn
    Inherits DataGridTextBoxColumnEx
'
End Class
Public Class Test
    Public Shared Sub Main()
        Dim dtg As New DataGrid()
        dtg.TableStyles.Add(New DataGridTableStyle())
 
        Dim tbce As New DataGridTextBoxColumnEx()        
        dtg.TableStyles(0).GridColumnStyles.Add(tbce)
        Dim nbc As New DataGridNumberBoxColumn()
        dtg.TableStyles(0).GridColumnStyles.Add(nbc)
 
        Dim ts As DataGridTableStyle = dtg.TableStyles(0)
        Dim c0 As Object = ts.GridColumnStyles(0)
        WriteLine(TypeName(c0))
        Dim c1 As Object = ts.GridColumnStyles(1)
        WriteLine(TypeName(c1))
 
        If TypeOf c0 Is DataGridNumberBoxColumn Then
            WriteLine("c0")
        End If
        If TypeOf c1 Is DataGridNumberBoxColumn Then
            WriteLine("c1")
        End If
    End Sub
End Class
--------------------------------------------------------------------------
Output:
	DataGridTextBoxColumnEx
	DataGridNumberBoxColumn
	c1
E dato che non si sa mai ... Framework 1.1!
Ciao!

In data Wed, 07 Apr 2004 06:48:33 GMT, ErPotenza ha scritto:
[cut]
Orpo al cubo...
Peraltro come se non bastasse questo problema come ho scritto in un altro
post mi si ingarbuglia pure l'IDE nel debug ed infine, avendo risolto in
altro modo la questione del tipo oggetto, ho ottenuto un bell'errore
criptico che su google non ha trovato risposta:
"the value for 'value' should be between minimun and maximum" o qualcosa
del genere (vado a memoria) che dovrebbe essere dovuto a qualche pasticcio
interno con le scrollbar della datagrid (che neanche sfioro di striscio).
Da questa esperienza rimpiango le mie Win32 :-(
Per il momento grazie, risolvo i miei problemi esistenziali in altro modo. 
Tutto questo pasticcio e' dovuto alla necessita' di nascondere l'oggetto
ospitato dalla cella (combobox o numberbox) quando clicco altrove e
l'oggetto stesso non "sente" il lostfocus; volevo fare in modo che la grid
scorresse le sue colonne, riconoscesse di quale tipo fossero e nascondesse
automaticamente l'oggetto.
In via indiretta ci sono riuscito (ho aggiunto una proprieta' che mi fa
riconoscere la colonna) ma a questo punto ho ottenuto in modo random
l'errore descritto sopra.
La soluzione poco elegante ma funzionale e' di nascondere l'oggetto (che
definisco esternamente alla griglia e passo byref) fuori dal codice della
inherited grid.
