gennaio 2005 Blog Posts
Sarà un bug dell'oggetto
System.Windows.Forms.DataObject?
Dal principio: ho una
treeview che contiene oggetti di tipo System.Windows.Forms.TreeNode ed oggetti
di tipo treeNode che ereditano, naturalmente, dal primo tipo.Quando parte un
Drag&Drop chiamo la DoDragDrop con il nodo in questione:Me.DoDragDrop(e.Item, AllowDrag)
All'evento DragOver verifico la presenza di un oggetto di tipo
System.Windows.Forms.TreeNode in e.Data:If e.Data.GetDataPresent(GetType(System.Windows.Forms.TreeNode)) ThenPurtroppo
questo metodo ritorna true SOLO nel caso che l'oggetto sia effettivamente di
tipo System.Windows.Forms.TreeNode e non se questo é un tipo da lì
ereditato!!!
Soluzioni?Nulla, quindi mi armo di Reflector ed indago:Innanzitutto
e.Data a parte l'interfaccia IDataObject é di tipo
System.Windows.Forms.DataObject il quale contiene un campo
privato che si chiama InnerData del tipo...
Mi é
recentemente capitata l'esigenza di avere una treeview (vale anche per la
listview) che permetta di avere le checkbox a tre (o più) stati.Basandomi
sull'ottimo lavoro di Brad Martinez (in VB6)http://www.mvps.org/ccrp/ho esteso il
controllo treeview per suportare nodi a tre stati.
Dal principio, un
bell'Enum e una classe TreeNode estesa:
Public Enum TreeViewCheckState NoCheck = 0 UnChecked = 1 Checked = 2 UnCheckedGrayed = 3 CheckedGrayed = 4End EnumPublic Class TreeNode Inherits System.Windows.Forms.TreeNode Private m_CheckState As TreeViewCheckState Public Overridable Property CheckState() As TreeViewCheckState Get Return m_CheckState End Get Set(ByVal Value As TreeViewCheckState) m_CheckState = Value 'Imposto il valore di checked: If Not Me.TreeView Is Nothing AndAlso TypeOf Me.TreeView Is Treeview Then DirectCast(Me.TreeView, Treeview).SetCheckIcon(Me) End If End Set End PropertyEnd Class
E a questo punto
viene il momento della treeview.Alcune note sul comportamento della
treeview:1) Integra una ImageList ChecksImageList
che continene le immagini che può assumere la "checkbox" dei singoli treenode.
L'immagine di indice zero non ha importanza perché all'indice zero corrisponde
l'assenza di checkbox.2) C'è una sottoclasse EventHashtable (il nome deriva
dal fatto che nella...
Vi é
mai capitato di dover gestire/enumerare le finestre aperte non dal vostro
programma? Se sì vi consiglio questo utile wrapper:
http://www.koders.com/csharp/fidF5C2650F8631BB4506D2DD38094D9FDF30D0C47B.aspx