none
如何调试自定义控件的设计时行为(WinForm) RRS feed

  • 问题

  • 如题,我现在出现了一个问题:

    继承TabControl,重新设计了部分UI,生成了TabControlEx控件,但是,在使用该控件时(设计时,VS窗体设计器内),出现了一个问题:在每次重新打开VS设计器时,其布局会向一个固定的方向偏移一定的距离。但在实际使用时(运行时)却又没有任何问题。

    这个问题说大也不大,但每次重新调整内部控件的位置也很令人困扰,尤其当其包含多个页面,又分别包含很多控件时,实在是令人烦躁。

    所以想请问,如何调试自定义控件的设计时行为?

    2017年11月27日 10:02

答案

  • 加入DesignMode的判断,设计时可以忽视不必要的代码。

    /// <summary>
    /// 标题:获取一个值,用以指示 System.ComponentModel.Component 当前是否处于设计模式。
    /// 描述:DesignMode 在 Visual Studio 产品中存在 Bug ,使用下面的方式可以解决这个问题。

    /// </summary>
    protected new bool DesignMode
    {
        get
        {
            bool returnFlag = false;
    #if DEBUG
            if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
            {
                returnFlag = true;
            }
            else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper().Equals("DEVENV"))
            {
                returnFlag = true;
            }
    #endif
            return returnFlag;
        }
    }


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年11月29日 1:13

全部回复

  • Hi,

    欢迎在MSDN论坛发帖。

    我这测试做了一个usercontrol 控件,然后把它放到winform的form上面,再次启动VS,打开这个工程的时候,并没有你说的那种情况,发生了位置偏移。我使用的是VS2015和windows 10的操作系统。

    你能上传一份可以重现问题的demo 到one drive 上面吗? 方便我们测试问题。

    请不要把个人的私人信息放到one drive 里面。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年11月28日 6:52
    版主
  • 加入DesignMode的判断,设计时可以忽视不必要的代码。

    /// <summary>
    /// 标题:获取一个值,用以指示 System.ComponentModel.Component 当前是否处于设计模式。
    /// 描述:DesignMode 在 Visual Studio 产品中存在 Bug ,使用下面的方式可以解决这个问题。

    /// </summary>
    protected new bool DesignMode
    {
        get
        {
            bool returnFlag = false;
    #if DEBUG
            if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
            {
                returnFlag = true;
            }
            else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper().Equals("DEVENV"))
            {
                returnFlag = true;
            }
    #endif
            return returnFlag;
        }
    }


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年11月29日 1:13