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