Winform 中 DesignMode 返回值不正确的问题。
本文转载:http://blog.csdn.net/sabty/article/details/5325260
以前也曾遇到这样的问题,不过影响不大也没有去详细了解。今天又重新遇到此问题,实在太不便。经查证这是 Visual Studio 2005 的 Bug。微软对此的 Bug 描述:http://support.microsoft.com/?scid=kb;zh-cn;839202&x=10&y=15
//DesignMode存在BUG,在构造函数里面DesignMode永远都是false,
//建议:不要把代码写在此处。否则每次"重新"解决方案时候都会执行。
建议把初始化代码代码写在FormLoad事件里面或者重载 protected override void OnCreateControl()。
解决方法:
在你的 Form 控件中重写 DesignMode 属性,代码如下:
- /// <summary>
- /// 标题:获取一个值,用以指示 System.ComponentModel.Component 当前是否处于设计模式。
- /// 描述:DesignMode 在 Visual Studio 2005 产品中存在 Bug ,使用下面的方式可以解决这个问题。
- /// 详细信息地址:http://support.microsoft.com/?scid=kb;zh-cn;839202&x=10&y=15
- /// </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;
- }
- }
{
public UserControl3()
{
InitializeComponent();
//DesignMode存在BUG,在构造函数里面DesignMode永远都是false,
//建议:不要把代码写在此处。否则每次"重新"解决方案时候都会执行。
//if (this.DesignMode==false)
// MessageBox.Show(Application.StartupPath);
}
private bool _IsViewMode = false;
public bool IsViewMode
{
get
{
if (this.DesignMode == false)
MessageBox.Show(Application.StartupPath);
return _IsViewMode;
}
}
private void UserControl3_Load(object sender, EventArgs e)
{
if (this.DesignMode == false)
MessageBox.Show(Application.StartupPath);
}
方法二:
Winform中自定义控件判断是否处于IDE设计模式(DesignMode,Designtime,构造函数,Load)
在设计自定义控件时,经常需要在构造函数或者Load事件中添加初始化代码,但是这些代码在进入窗体设计也会被执行,造成了设计窗口出现异常的情况。
使用下面的代码,可以让你判断出是否处于窗体设计模式,进而保证代码只会在最终用户使用时才会被执行。
public static bool IsDesignMode() { bool returnFlag = false; #if DEBUG if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) { returnFlag = true; } else if (Process.GetCurrentProcess().ProcessName == "devenv") { returnFlag = true; } #endif return returnFlag; }
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【腾讯课堂】:https://abennet.ke.qq.com
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET