我的程序里一个ShowDialog() 偶尔会执行两次。不知道什么原因。

问题描述

代码比较多,我简化一下。首先使用了C1TrueDBGrid这个控件。你要实现的功能是,在C1TrueDBGrid的单元格输入产品编码,按回车出来选择产品的模式窗口。选择数据后返回结果。现在的问题是这个模式窗口有的时候打开两次,测试了好久,没有固定的条件。就是偶尔会出现。事件委托是自己在代码里写的。this.AfterColEdit-=newC1.Win.C1TrueDBGrid.ColEventHandler(NewDataGrid_AfterColEdit);this.AfterColEdit+=newC1.Win.C1TrueDBGrid.ColEventHandler(NewDataGrid_AfterColEdit);voidNewDataGrid_AfterColEdit(objectsender,C1.Win.C1TrueDBGrid.ColEventArgse){Frompop=newFrom();if(pop.ShowDialog()==DialogResult.OK){/}}

解决方案

解决方案二:
可能是你引用第三方控件的问题,我也遇到过!
解决方案三:
我也遇到过模式窗口出现多次的情况,那是因为for循环里面嵌套了if...else语句,改正方法是在循环for外设一个boolean参数,另外在再用一个if语句
解决方案四:
引用2楼zjc378933260的回复:

我也遇到过模式窗口出现多次的情况,那是因为for循环里面嵌套了if...else语句,改正方法是在循环for外设一个boolean参数,另外在再用一个if语句

先用你的办法试试,看还会不会出现。我开始是怀疑NewDataGrid_AfterColEdit被调用了多次,
解决方案五:
NewDataGrid_AfterColEdit被多次触发导致
解决方案六:
引用4楼sandy945的回复:

NewDataGrid_AfterColEdit被多次触发导致

要怎么避免中呢?
解决方案七:
能解释一下吗。有朋友告诉我是用"+="委托事件引起多次触发,可我不理解。
解决方案八:
可能性有多个,这里条件不足,无法判断。可能是:一、事件执行中又无意中触发了事件本身,解决方法是事件执行代码中(-=)将事件先屏蔽,执行后(+=)重新启用。二、事件源头可能会触发多次,解决方法是,配合其它事件来组合触发条件,或者直接更换事件。
解决方案九:
按回车出来选择产品的模式窗口------------------------解决问题的办法还得从源头找你得控制只在按回车的时候才触发相关事件

时间: 2024-10-04 15:27:14

我的程序里一个ShowDialog() 偶尔会执行两次。不知道什么原因。的相关文章

delphi线程问题 delphi 程序里我写了一个方法

问题描述 delphi线程问题 delphi 程序里我写了一个方法 delphi 程序里我写了一个方法,方法里面的算法比较复杂,计算起来时间比较长,我想把这个方法单独放到一个线程里去执行,请问是怎么写?一点头绪没有啊,谢谢 解决方案 unit Unit1; interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls; type TForm1 = class(T

安卓网-android 在桌面直接打开应用软件和一个程序里直接打开另一个程序机制上有什么不同?

问题描述 android 在桌面直接打开应用软件和一个程序里直接打开另一个程序机制上有什么不同? 面试题来的,完全不会,吓蒙了... android 在桌面直接打开应用软件和一个程序里直接打开另一个程序机制上有什么不同? 解决方案 如何用java程序直接打开一个Excel文件.

aspnet-asp.net web应用程序 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值!

问题描述 asp.net web应用程序 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值! 外部类 如何访问asp.net页面里的一个控件 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值! 解决方案 用一个public的变量呢

想问问我建立了一个webservice应用程序客户端,直接在程序里运行调用方法是对的,但进debug或release直接运行后就报错,这是为什么啊?

问题描述 想问问我建立了一个webservice应用程序客户端,直接在程序里运行调用方法是对的,但进debug或release直接运行后就报错,这是为什么啊?感觉就是不用程序直接运行的话,其他方法运行就报错误.里面什么其他的都没做,就是直接加了web引用,然后调了一个方法而已.谁能解答一下? 解决方案 解决方案二:up

编写控制面板程序的一个例子

本文配套源码 最近在编写一个Windows 98 和 Windows 2000 系统中使的MPEG播放器,我想创建一个控制面板程序,用户可以通过这个程序改变播放器的 基本配置.大家知道,控制面板程序一般都是个DLL动态库,然后将名字改为*.cpl.查找了许多资料后,发现所看到的一些例子都是用C写的.能不能在MFC中用C++来编写一个呢?答案是肯定的.本文将通过一个实际的VC++例子来示范如何编写MFC控制面板程序. 首先要清楚虽然控制面板程序是一个DLL,但它和一般DLL还是有所差别的,因为它带

在应用程序里识别UserAgent对应的浏览器

ASP.Net有很好的机制来识别用户的浏览器: 用Request.Browser就可以拿到一个 HttpBrowserCapabilities,然后用相应的属性可以取到值,比较浏览器类型,屏幕大小,JS支持等等. 对于移动设备更可以这么用,很容易拿到需要的属性(当然ASP.Net自带的浏览器库还是很不全). 但是怎样在WinApp里根据UserAgent识别浏览器呢?我通过Reflector看到主要是在 BrowserCapabilitiesFactory这个类中对浏览器的Capability进

我的程序里《我的歌声里》程序员版

我的程序里 没有一点点防备 也没有一丝顾虑 突然错误出现 在我的日志里带给我惊喜 身不自已可是你偏又这样 在我不知不觉中悄悄的 消失 从我的堆栈里没有音讯 剩下了报警短信 你 存在我某一个模块里 我的梦里,我的心里,我的程序里 你 存在我深哪一个模块里 我的梦里 我的心里 我的程序里 还记得我们曾经肩并肩一起排查 某个线上问题尽管一开始下起来没法下手 但我们没有放弃自己的借口 一个断点 一个结构 一行一行注释的背后 好像是一场战斗 不能回头 你存在我某一行代码里 我的梦里 我的心里 我的程序里

tabactivity-如何修改在TabActivity里一个Tab的标题

问题描述 如何修改在TabActivity里一个Tab的标题 我在 TabActivity 底部设置了 tabs,由下面的几个不同的 activity 组成 public class HomeScreen extends TabActivity {private TabHost mTabHost;@Overridepublic void onCreate(Bundle icicle) { super.onCreate(icicle); try{ setContentView(R.layout.h

c++-各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现?

问题描述 各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现? 对于程序运行过程中卡死已经能检测,但是对于一些弹框类的运行出错却不知道怎么检测,请各位大虾指点迷津; 现在没有C币,如果回答是我想要的,我花钱补上 解决方案 这不就是编写一个华医生么(注:华医生是微软系统上负责处理应用程序崩溃的程序,就是你图上的"xxx已停止工作,Windows正在联机查找解决方案"),这是一个应用程序,是在用户模式下实现的,而并非在内核中实现,其实华医生也可以卸