摘要: 调查一个奇怪的系统异常时发现的这个bug,现象就是用户在ComboBox里面选择一项后,程序在SelectIndexChanged 事件中根据用户选择刷新数据时出现错误。跟踪调试后才发现原来是SelectedValue 值和用户选择的Item项不一致。
但是为什么会出现这样奇怪的错误呢?
阅读全文
摘要: FlexGrid 控件提供了指定左侧显示列的功能。因项目的需要,要求能够指定最右侧显示的列。
实现方法:
获取表格客户区宽度,然后通过每列的宽度计算出水平滚动条的位置。
但是有一个麻烦,就是垂直滚动条的问题。
首先要能判断是否有垂直滚动条,
然后有垂直滚动条时,需要减出垂直滚动条的宽度,
但是控件没有提供这方面的接口
阅读全文
摘要: 这类加密保护方式属于整体程序集的加密保护.
这个方法首要解决的问题就是 native code 和 .Net Code如何交互.
这里介绍三种实现方式.
阅读全文
摘要: C#中使用晚绑定实现压缩Access数据库.
VB对Com后期绑定支持得很好,在C#中可以使用反射来实现.
阅读全文
摘要: 不使用C++CLI,不使用 native dll.
直接在 .Net 程序 中之行 native code。
阅读全文
摘要: 测试程序发现了一个bug, 几经调试最后定位到一条复杂表达式语句的计算结果不正确.
代码中用复杂表达式不是一个好习惯,调试起来很不方便.
为了方便跟踪调试,看看究竟是表达式的那部分计算出了问题.
就先把表达式拆开来写了.
再运行, 嗨, bug没有了. 跟踪看了表达式最终计算结果,也正确了.
阅读全文
摘要: 看看下面的代码: 你觉得这段代码能否正确执行?结果会怎样?
sbyte sba, sbb,sbv;
sba = 1; sbb = 2; sbv = sba + sbb;
byte ba, bb, bv;
ba = 1; bb = 2; bv = ba + bb;
阅读全文
摘要: 前面提到了form关闭时的两个奇怪现象,有不少朋友参与了讨论。
有些朋友还没有看清楚问题的所在就很轻率的评论。
A.Z. 在讨论中已经找到的问题的基本所在,问题关键还是在 CalledClosing 这个变量的状态。
这个问题要从另外一个奇怪现象说起。
为什么直接给 form的DialogResult属性赋值会导致form关闭?
这个属性的set函数如下:
public void set_DialogResult(DialogResult value)
{
if (!ClientUtils.IsEnumValid(value, (int) value, 0, 7))
{
throw new InvalidEnumArgumentException("value", (int) value, typeof(DialogResult));
}
this.dialogResult = value;
}
很明显,这个set函数不可能直接导致 form的关闭。
阅读全文
摘要: 今天查一个错误时发现这个问题。
有一个frmEdit。在Closing事件里面判断数据是否修改,然后提示用户是否需要保存数据。
提供了三个按钮,yes,no,cancel。
yes:保存数据,关闭窗体。
no:直接关闭窗体。
cancel:不关闭窗体。
实际运行,点yes,cancel,处理都对,但是点 no,就会重复弹出这个对话框,
如果一直点 no的话,就会一直出现。
看一眼代码没有发现明显问题,实际调试才发现问题所在。
代码如下:
阅读全文
摘要: 在 C++ 中我们能够通过 LoadLibrary, GetProcAddress 来动态调用 dll 的导出函数.
在 C# 中也能够用这样的方式吗?
阅读全文
摘要: 前面我们只处理了 DataGridView 的mousedown事件, 现在要处理 mousedown, mousemove, mouseup这三个事件来完成这个任务.
大致过程如下:
在MouseDown事件里面和之前一样处理,只是不启动拖放操作.
而是保存要拖放的数据, 以及建立一个小的矩形框(根据系统DragSize信息).
然后在 MouseMove 事件里面判断
是否已经准备好拖放了,如果准备好了,就启动拖放操作.
(注:鼠标在小矩形框范围内的移动不启动拖放操作)
MouseUp里面清除哪些标记量.
这样就能处理左键单击的选择和 左键拖放了
阅读全文