共计 5 篇文章

异常吞噬问题一则

问题 在一个 Timer 时钟的周期方法内,有一个 foreach 循环,当执行到某些特定的语句时,会从头开始执行,而不会执行后续的语句。 分析 该问题我在初步分析之后,发现可能是由于程序出现了异常,但是被吞噬掉造成的。在我某一个 item 元素当中,其值为 null 应该会抛出空异常。但是没有异常抛出,后续我不知道哪个地方吞噬了异常,就在循环体内增加了一个 if 语句过滤掉了 null ...

DevExpress 使用 GridControl 时,数据源无法立即更新的问题

背景 在使用 DevExpress 的 GridControl 为其实现 Checkbox 列,发现如果勾选了三行的数据,在遍历 GridControl 绑定的数据源时 Checkbox 列的数据仅有 2 行被更新。 原因 使用 Google 搜索了半天,在 DevExpress 的 Support 上找到了答案,似乎是需要手动调用 ...

WinForm 在线程中启动新的窗口

由于工程需要在线程当中加载一个新的WinForm窗口,但是直接在线程中加载会立即闪退,我认为是线程执行完成之后自动销毁了new的窗口。 new Thread(()=>{new Form2().Show();}).Start(); 之后谷歌了一番,有人提到使用异步委托在线程中来加载新的窗口: new Thread(()=>{BeginInvoke(new MethodInvoker(()=> { new Form2().Show(); }));}).Start(); 使用如上方法能够正常运行。 ...

实现毛玻璃效果

经过测试只能在Windows7 下正常使用,在Win8或者Xp下面无法正常显示毛玻璃效果。 首先你要先创建一个结构体如下: [StructLayout(LayoutKind.Sequential)] public struct MARGINS { public MARGINS(Thickness t) { Left = (int)t.Left; Right = (int)t.Right; Top = (int)t.Top; ...

WinForm 图标复用,减少exe文件体积

经常我们使用C#开发windows窗体程序的时候,会使用到图标,但经常会碰到这样一个问题。 如果我们在项目属性中设定了一个50kb的ico图标,但是我们为了每个窗体的美观都需要在每个窗体又要使用相同的图标文件,这样的话,如果我们有3个窗体,就需要3个图标150KB,加上项目图标就是200KB,如果你有很多窗口的话,那么就会更加蛋疼。 解决办法就是在每个窗体的ico图标我们直接使用项目的那个50kb的图标就行了,避免重复添加。 只需要在每个窗口的laod事件里面手动加载图标即可。 private void Form1_Load(object sender, EventArgs e) { // 加载图标 this.Icon ...