摘要:调查一个奇怪的系统异常时发现的这个bug,现象就是用户在ComboBox里面选择一项后,程序在SelectIndexChanged 事件中根据用户选择刷新数据时出现错误。跟踪调试后才发现原来是SelectedValue 值和用户选择的Item项不一致。
但是为什么会出现这样奇怪的错误呢?
阅读全文
摘要:Version 2.9.5 (July 10, 2008)[+] Add secure callback sdk and Document.[*] Improved compatibility .兼容 vs2008 sp1 beta1 及 .Net Framework 3.5 sp1 beta1.[*] Fixed Generic Type handle issue.[*] Fixed .net1...
阅读全文
摘要: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的话,就会一直出现。
看一眼代码没有发现明显问题,实际调试才发现问题所在。
代码如下:
阅读全文
摘要:DataGridView 绑定DataTable方式,进行编辑。如果只在表格的某一行内进行编辑,且保持焦点只在这一行变动。进行数据保存时这一行的变更就无法正常保存。然后我有试着在保存之前调用 DataGridView 的EndEdit .结果还是无法保存这一行的修改.最后没有办法就试了试 bindingSource.先将 DataTable 绑定到 bindingSource. 再将 bindin...
阅读全文
摘要:在 C++ 中我们能够通过 LoadLibrary, GetProcAddress 来动态调用 dll 的导出函数.
在 C# 中也能够用这样的方式吗?
阅读全文
摘要:前面我们只处理了 DataGridView 的mousedown事件, 现在要处理 mousedown, mousemove, mouseup这三个事件来完成这个任务.
大致过程如下:
在MouseDown事件里面和之前一样处理,只是不启动拖放操作.
而是保存要拖放的数据, 以及建立一个小的矩形框(根据系统DragSize信息).
然后在 MouseMove 事件里面判断
是否已经准备好拖放了,如果准备好了,就启动拖放操作.
(注:鼠标在小矩形框范围内的移动不启动拖放操作)
MouseUp里面清除哪些标记量.
这样就能处理左键单击的选择和 左键拖放了
阅读全文
摘要:实现方法,在datagridview的mousedown事件中开始 托放。然后在treeview 的 DragEnter 中接收托放。最后在treeview的 DragDrop 中处理托放结果。注:treeview的allowdrop属性要设置为 true。: 1private void dataGridView1_MouseDown(object sender, MouseEventArgs ...
阅读全文
摘要:将字段 assessortime 绑定到 DateTimePicker1.DateTimePicker1.DataBindings.Add("Value", bindingSource1, "assessortime");如果字段 assessortime的值 为 null 时 就会出现异常.后来发现 用 vs2005 的数据源 直接拖到窗体上的 DateTimePicker控件的绑定,遇到 nu...
阅读全文
摘要:数据表: Users字段 ID ,类型 int字段 UserName, 类型 string字段 Group, 类型 int. (2 代表 管理员, 1 代表 认证用户 , 0 代表 注册用户)在一个winform上有一个 bindingNavigator, bindingNavigator1一个 bindingSource bindingSource1.一个textbox txtName.一个 ...
阅读全文