C#WindowsForm拖拽事件一例bug分析
2008-03-03 13:24
211 查看
在VS2005C#中处理拖拽,编写DragEnter事件处理函数时,错把参数“sender”当作DataObject来试用了,写了如下代码:
DataObject data = sender as DataObject;
由于使用的是“as”运算符,类型转换失败被隐藏了,而接下来我直接使用了data对象。
运行结果发现“e.Effect = DragDropEffects.Copy;”这样的设置无效,鼠标的样式并未相应变化。
后来逐句测试,发现注释此语句及相关语句便可让“e.Effect” 设置生效,确定是此句代码有问题。
应该是类型转换失败,结果data实得null值,后面对其引用应该会抛出NullReferenseException;
改为如下,问题解决:
DataObject data = e.Data; // e为“DragEventArgs”类的事件参数
上面分析应该是抛出了异常,可为何程序未报错呢?再测试,发现,原来刚才在此事件处理函数中产生的异常,并不会被一直向上抛出(被.NET给隐瞒了?),如果某些异常未人为处理的话,可能会被掩盖忽略,需留意。
DataObject data = sender as DataObject;
由于使用的是“as”运算符,类型转换失败被隐藏了,而接下来我直接使用了data对象。
运行结果发现“e.Effect = DragDropEffects.Copy;”这样的设置无效,鼠标的样式并未相应变化。
后来逐句测试,发现注释此语句及相关语句便可让“e.Effect” 设置生效,确定是此句代码有问题。
应该是类型转换失败,结果data实得null值,后面对其引用应该会抛出NullReferenseException;
改为如下,问题解决:
DataObject data = e.Data; // e为“DragEventArgs”类的事件参数
上面分析应该是抛出了异常,可为何程序未报错呢?再测试,发现,原来刚才在此事件处理函数中产生的异常,并不会被一直向上抛出(被.NET给隐瞒了?),如果某些异常未人为处理的话,可能会被掩盖忽略,需留意。
相关文章推荐
- c# windows form 生命周期 (Life cycle) 事件 顺序
- 关于C# Windows 程序设计里的button click事件的分析
- c# windows form 生命周期 (Life cycle) 事件 顺序
- 一例生产网中断,导致管理网无法ssh的事件分析
- C#捕获Windows关机事件
- 使用c#捕获windows的关机事件
- C# windows form程序怎么读取项目的跟路径
- 深入浅出C#2008从入门到提高Step By Step(五)Windows应用程序常用控件类(1)-Form
- 初识 c# 事件机制 Form间通信示例
- Asp.net(C#) windows 服务{用于实现计划任务,事件监控等}
- Creating a immovable windows' form in c#
- Visual Studio 调试器bug一例分析
- C#中Form的Paint事件响应方法与重载虚方法OnPaint()的区别
- C# Windows Form下的控件的Validator(数据验证)
- 使用c#捕获windows的关机事件
- C# Windows Form之间的传值方法
- C# Adding Hyperlink to Windows Form z
- 【C#】组件分享:FormDragger窗体拖拽器
- C#捕获windows关机事件,在系统关机前做一些自己想做的事
- android7.0 multiWindow 之拖拽失效(android事件分发机制分析)