ControlDesigner

 

GetHitTest

https://stackoverflow.com/questions/7762397/how-do-i-click-a-usercontrols-child-in-designer

@Bradley: thanks for pointing me in the right direction

You will need to write a ControlDesigner class, then use it in a [Designer( ... )] attribute on your UserControl.

See the example here: http://msdn.microsoft.com/en-us/library/sycctd1z(v=VS.90).aspx

For the actual click:

http://msdn.microsoft.com/en-us/library/system.windows.forms.design.controldesigner.gethittest(v=VS.90).aspx

The ControlDesigner has a protected bool GetHitTest(Point point) method - you can implement this in your ControlDesigner and return true when you want your control to handle a click, based on the click's location on the screen.

 

Example

复制代码
 protected override bool GetHitTest(Point point)
        {
            bool flag = false;
            ASVerticalTab tab = Control as ASVerticalTab;
            if (tab != null)
            {
                Point clientPoint = tab.PointToClient(point);

                foreach (Control control in tab.TabPages)
                {
                    ASVerticalTabPage tabPage = control as ASVerticalTabPage;
                    if (tabPage == null)
                    {
                        continue;
                    }
                    var menuItem = tabPage.MenuItem;
                    var actualRectangle = new Rectangle(menuItem.Location, menuItem.Size);
                    if (actualRectangle.Contains(clientPoint))
                    {
                        flag = true;
                        break;
                    }
                }
            }
            return flag;
        }
复制代码

 

 

关于DesignMode

https://stackoverflow.com/questions/4346361/winform-custom-control-designmode-doesnt-return-true-whereas-in-design-mode

LicenseManager.UsageMode is intended for this.

It is in fact the only reliable way to detect if your control is in design mode or not. It's only valid during the constructor, but it can easily be stored in a field of the class for later reference.

The DesignMode property for nested controls will be false even when the container control is in design mode.

 

在类的构造函数里面,使用一个字段存一下 LicenseManager.UsageMode

 

 

相关资料

http://www.cnblogs.com/blueglass/archive/2012/06/01/2530030.html

Extending Design-Time Support

Custom Designers

作者:Chuck Lu    GitHub    
posted @   ChuckLu  阅读(725)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2015-07-03 CodeWars可以学习的
2015-07-03 Number of Rectangles in a Grid
2014-07-03 同步TreeView中父结点和子结点的状态[以及Treeview的bug]
点击右上角即可分享
微信分享提示