| File: System\Windows\Forms\Design\TreeViewDesigner.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; namespace System.Windows.Forms.Design; /// <summary> /// This is the designer for tree view controls. It inherits /// from the base control designer and adds live hit testing /// capabilities for the tree view control. /// </summary> internal class TreeViewDesigner : ControlDesigner { private TVHITTESTINFO _tvhit; private DesignerActionListCollection? _actionLists; private TreeView? _treeView; public TreeViewDesigner() { AutoResizeHandles = true; } /// <summary> /// Disposes of this object. /// </summary> protected override void Dispose(bool disposing) { if (disposing) { if (_treeView is not null) { _treeView.AfterExpand -= TreeViewInvalidate; _treeView.AfterCollapse -= TreeViewInvalidate; _treeView = null; } } base.Dispose(disposing); } /// <summary> /// Allows your component to support a design time user interface. A TabStrip /// control, for example, has a design time user interface that allows the user /// to click the tabs to change tabs. To implement this, TabStrip returns /// true whenever the given point is within its tabs. /// </summary> protected override bool GetHitTest(Point point) { point = Control.PointToClient(point); _tvhit.pt = point; PInvokeCore.SendMessage(Control, PInvoke.TVM_HITTEST, 0, ref _tvhit); return _tvhit.flags == TVHITTESTINFO_FLAGS.TVHT_ONITEMBUTTON; } public override void Initialize(IComponent component) { base.Initialize(component); _treeView = component as TreeView; Debug.Assert(_treeView is not null, "TreeView is null in TreeViewDesigner"); if (_treeView is not null) { _treeView.AfterExpand += TreeViewInvalidate; _treeView.AfterCollapse += TreeViewInvalidate; } } private void TreeViewInvalidate(object? sender, TreeViewEventArgs e) => _treeView?.Invalidate(); public override DesignerActionListCollection ActionLists => _actionLists ??= new DesignerActionListCollection { new TreeViewActionList(this) }; }