January 2005 Blog Posts

Drag&Drop ed ereditarietà

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...

posted @ Friday, January 28, 2005 6:43 PM | Feedback (0)

Windows Forms threestate treeview

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...

posted @ Tuesday, January 25, 2005 3:02 PM | Feedback (0)

Win32Window

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

posted @ Thursday, January 20, 2005 12:45 PM | Feedback (0)