winform 画面关闭返回值_Winform 中 DesignMode 返回值不正确的问题。

以前也曾遇到这样的问题,不过影响不大也没有去详细了解。今天又重新遇到此问题,实在太不便。经查证这是 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 属性,代码如下:

/// 

/// 标题:获取一个值,用以指示 System.ComponentModel.Component 当前是否处于设计模式。

/// 描述:DesignMode 在 Visual Studio 2005 产品中存在 Bug ,使用下面的方式可以解决这个问题。

///        详细信息地址:http://support.microsoft.com/?scid=kb;zh-cn;839202&x=10&y=15

/// 

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 partial class UserControl3 : UserControl

{

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;

}

[改善Java代码]不要在finally块中处理返回值

在finally代码块中处理返回值,这是在面试题中经常出现的题目.但是在项目中绝对不能再finally代码块中出现return语句,这是因为这种处理方式非常容易产生"误解",会严重 ...

Asp.net MVC 中Controller返回值类型ActionResult

[Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...

Controller 中Action 返回值类型 及其 页面跳转的用法

•Controller 中Action 返回值类型 View – 返回  ViewResult,相当于返回一个View 页面. -------------------------------- ...

robot framework中的返回值

1.若想要再setup中有返回值,给后续的操作使用 A)在setup的关键词中需要的返回值,设置为global variable或者suit variable:如下图:但是在编译器中,会报错,但是执行 ...

Web API中的返回值类型

WebApi中的返回值类型大致可分为四种: Void/ IHttpActionResult/ HttpResponseMessage /自定义类型 一.Void void申明方法没有返回值,执行成功后 ...

用jquery的ajax方法获取return返回值的正确姿势

如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...

c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题

c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...

try--catch--finally中return返回值执行的顺序(区别)

1.try块中没有抛出异常,try.catch和finally块中都有return语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static int ...

C++ 中的返回值

C++中大致有三种返回值:值拷贝(副本),值引用和指针,返回什么类型的值要根据当时情况而定. 如果返回的是大型对象的副本,那么在每一次的函数调用后返回,都会调用该对象类型的拷贝构造函数构造一个新的副本 ...

随机推荐

python 版 mldivide matlab 反除(左除)《数学建模算法与程序》Python笔记

今天在阅读数学建模的时候看到了差分那章 其中有一个用matlab求线性的代码,这里我贴出来 这里我送上 Python代码 In [39]: import numpy as np ...: from s ...

Fragment的初步设计

Fragment的初步设计 Fragment功能 Fragment将每一段碎片时间归类到一个具体的事件上: 使用者可以创建多个事件对碎片时间进行分类: 使用者点击事件会进入用户自己设置好的事件对应的A ...

zt:如何快速赚取人生第一个100万?

投递人 itwriter 发布于 2016-06-20 23:43 评论(16) 有1795人阅读 原文链接 [收藏] « » 不久前我开始使用「分答」,将回答问题的价格设置成 10 元.花最长 1 ...

StrutsPrepareAndExecuteFilter(转)

http://www.iteye.com/topic/829843  一.概述 Struts2的核心是一个Filter,Action可以脱离web容器,那么是什么让http请求和action关联在一起 ...

Servlet学习--练习示例总结

醉了醉了..本来想测试下Servlet生命周期的,然后调了好久的错误,还是没成功,不知道为什么不能这样做 贴上代码: import java.io.IOException; import java.i ...

python三元操作符

#比较大小更简单了 x,y=3987,24361 small=(x if x

如何让大小一定的span能够包含“容不下”的内容

overflow: hidden; text-overflow: ellipsis; width: 70px;(长度随意) 给span加上面的代码

使用JavaScript完成文字向上间歇滚动

使用JavaScript完成文字的间歇滚动 const init = (initData) => { const area = initData.area; // 设置单行滚动的高度: cons ...

字符编码unicode,utf-8和ascii

Ascii编码 由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值